Ido Flatow氏が.NET 4.5のWCFの変更について記事を書いている。
より簡易な設定を実現するため、WCFが自動生成する構成ファイルが大幅に小さくなる。WCFの最初のバージョン以来、開発者は30近い構成値を持つapp.configをメンテナンスしなければならなかったが、構成値のほとんどはデフォルトの値だった。WCFに詳しい開発者は不要な構成値を削除しているが、多くの開発者はどのように削除すればいいかわからない。WCF 4.5では構成ファイルはデフォルトではバインディングタイプとバインディング名だけになる。
こうなると“設定がどうなっているかはどうやって調べればいいのか”という疑問が生まれるのは当然だ。WCF 4.5の構成ファイルではツールチップとコード補完が使える。これはスキーマに基づいてヒントを表示してくれるのではない。例えば、エンドポイントを構成するとき、必要な振る舞いや構成を一覧してくれるのだ。また、スペルミスがある場合はコンパイル時に警告を出してくれる。
直接WSDLを扱う開発者にも恩恵がある。WCF 4.5はひとつのリクエストに対して完全なWSDLを返す。今までは、リクエストにマッチするXSDファイルをフェッチするのに必要なWSDLの一部しか返さなかった。?wsdlというクエリパラメータの代わりに?singleWsdlを使うことでこの振る舞いを実現できる。
WCFはWindows Serviceとして動作させることができるが、ほとんどの開発者はIISにサービスをホストしている。認証や状態管理、プロセスのリサイクルのような機能は組み込みでサポートしているが、このサポートモデルには限界がある。例えば、認証方式を2つの場所に設定しなければならない。この2つの設定を同期し忘れるとサービスは動かなくなる。WCF 4.5では“InheritedFromHost”に認証方式を設定することでIIS側に設定を移譲し、この問題を解決する。
残念ながらこれは部分的な修正だ。IISに複数の認証方式が設定されていても、接続するクライアントは最初のひとつの方式しか認識しない。クライアント側の開発者はこの方式を別の方式でオーバライドできる。もちろん、別の方式が見つかることが前提だ。これは完全にクライアント側の問題であり、WSDLファイルはすべての選択肢を一覧していることに注意されたい。
WSDLのHTTPSのポート用のURLの構成にはバグがある。現時点の.NET 4.0では、WCFは自動的に各バインディング(HTTP、TCPなど)向けにポートを構成するオプションがあるが、残念なことにHTTPSは含まれていない。しかし、この見落としも.NET 4.5で修正される予定だ。Ido Flatow氏によれば、現時点ではHTTPSの場合、WSDLをリクエストするとホスト名ではなくマシン名を表示する。これはウェブファームを構成する場合、問題になるかもしれない。
また、WCFでストリーミングデータを扱う時にもバグがある。氏によれば、
When you host a WCFサービスをIISにホストする場合、ASP.NET互換モードを使わなくても、ASP.NETパイプラインが動作します。これはWCF Services and ASP.NETというMSDNの記事で説明されています。.NET 4では、ASP.NETに設計上の欠陥があり、WCFへのリクエストをASP.NETがバッファしてしまいます。この振る舞いが原因でいくつかの副作用が起きます。
リクエストの処理の遅延が起きるだけでなく、大きなコンテンツは部分的にハードディスクにスワップしてしまう場合もある。WCF 4.5ではこれも修正される予定だ。