Visual Studio 2012 RC リリースに伴うソース コードの一部変更


こんにちは。

Visual Studio 2012 RC、.NET Framework 4.5 RC (および、ASP.NET MVC 4 RC) のリリースに伴い、本ブログで紹介した いくつかのソース コードを修正しましたので、以下に記載します。(読んでくれている方のために . . .)

 

WebSocket : Web.config への設定の追加

.NET を使用した WebSocket サーバーの開発では、Web.config に下記の設定を追加してください。(Beta では、この設定がなくても動作していました。)

これは、SignalR においても同様です。(特に、SignalR では、WebSocket 通信に失敗すると、Long Polling が使用されるため、一見、ちゃんと動いているように見えますのでご注意ください。Fiddler などで、正しく WebSocket が使用されているか確認してください。)

<configuration>
  . . .
  <appSettings>
    . . .
    <add
      key="aspnet:UseTaskFriendlySynchronizationContext"
      value="true" />
  </appSettings>
  . . .

</configuration>

詳細は、「WebSocket サーバー開発」を参照してください。

 

WebSocket : Microsoft.WebSockets の WebSocketService (WCF 用クラス) を使用した開発

次回のセミナーに備え、WCF + Microsoft.WebSockets (<= 0.2.2) で作成したサービスを動かしてみたのですが、正しく動かない模様です。原因は、IWebSocket インターフェイス (WebSocketService クラスの実装元となるインターフェイス) の OnOpen に、必要な Contract 属性が設定されていないためでした。今後、新しいバージョンの Microsoft.WebSockets パッケージがリリースされるのではないかと思いますので、お手数ですが、しばらくお待ちください。

なお、WCF を使用した WebSocket 開発 (NetHttpBinding を使用した開発) は、問題なく動作します。

詳細は、「WebSocket サーバー開発 : WCF 4.5 編」を参照してください。

 

ASP.NET Web API : フォーム認証 (Forms Authentication) を使用していて、権限がない場合の動作について

サイトでフォーム認証 (Forms Authentication) を使用していて、ASP.NET Web API の権限がない場合に、以前は FormsAuthenticationModule によって ステータスが 302 (Moved) に書き換えられ、ログイン画面にリダイレクトされていました。(このため、jquery などから保護された Web API を呼び出す際に、動作上の不都合が発生していました。本来は、401 (Unauthorized) が返されるべきです。)
この動作が、今回のバージョンから、既定で 401 (Unauthorized) が表示されるようになっています。(ただし、これは ASP.NET Web API のみの場合です。)

なお、もし、この既定の動きを抑制し、ASP.NET Web API でもログイン画面にリダイレクトしたい場合には、以下の通り設定します。

<configuration>
  . . .
  <appSettings>
    . . .
    <add key="webapi:EnableSuppressRedirect" value="false"/>
  </appSettings>
  . . .

</configuration>

上記は、ASP.NET MVC 4 RC でも同様です。

詳細は、「REST サービス / Web Api の実践」を参照してください。

 

ASP.NET Web API : 一部設定項目の App_Start への移動

ASP.NET Web API における MapHttpRoute などの設定場所が、従来の Global.asax.cs から、App_Start/RouteConfig.cs などに移動されています。

 

ASP.NET Web API : HttpRequestMessage、HttpResponseMessage の Generic 型の廃止

HttpResponseMessage の Generic 型は、廃止されました。

これに伴い、下記の通りソース コードの変更が必要です。

Beta まで

MyClass1 resObj = new MyClass1();
HttpResponseMessage<MyClass1> resMsg =
    new HttpResponseMessage<MyClass1>(resObj, HttpStatusCode.OK);

RC 以降

MyClass1 resObj = new MyClass1();
HttpResponseMessage resMsg = new HttpResponseMessage(HttpStatusCode.OK);        
resMsg.Content = new ObjectContent<MyClass1>(
    resObj,
    new System.Net.Http.Formatting.JsonMediaTypeFormatter());

詳細は、「REST サービス / Web Api の実践」を参照してください。

 

ASP.NET Web API : System.Json から Json.NET (Newtonsoft.Json.dll) への変更 (追記)

ASP.NET Web API で使用される Json シリアライズ (及び、逆シリアライズ) では、従来使用していた System.Json は廃止され、Json.NET (Newtonsoft.Json.dll) が使用されています。(このため、今回から、System.Json.dll は含まれていません。)
このため、JsonObject、JsonValue などを使用したコードも、すべて Json.NET のライブラリーのクラス (JObject,  JToken など) に変更します。(なお、これまでの System.Json (Beta 版) も、NuGet から取得できます。 )

詳細は、「SharePoint 2010 の REST を使用した操作一覧」を参照してください。

 

ASP.NET Web API : 検索可能な ASP.NET Web API における Queryable 属性の明示 (追記)

検索可能な ASP.NET Web API のメソッドでは、[Queryable] 属性の明示が必要です。

[Queryable]
public IQueryable<Contact> Get()
{
  . . .

詳細は、「REST サービス / Web Api の実践」を参照してください。

 

上記は、本ブログに掲載したサンプル コードに関連する部分のみの抜粋です。(もちろん、Visual Studio 2012 RC の変更点全体は、上記以外にも多数あります。ASP.NET MVC 4 の Beta からの変更点は、「ASP.NET : Changes from ASP.NET MVC 4 Beta」 に記載されています。SPA が OOB 組み込みでなくなった、など、Breaking Changes も いくつか含まれています。。。)

う~ん、デモのコードも、多数変更になってしまいました。。。(汗)

 

 

Comments (0)

Skip to main content