この質問は、IIS 7.5 と組み合わせた動的言語ランタイムのバグに関連しています。
ChannelFactory
正しく型付けされた動的オブジェクトを提供するとハングします。
dynamic src = "MSFT";
var binding = new BasicHttpBinding();
var endpoint = new EndpointAddress("http://www.restfulwebservices.net/wcf/StockQuoteService.svc");
var channel = new ChannelFactory<IStockQuoteService>(binding, endpoint).CreateChannel();
// this will print just fine
Console.WriteLine(channel.GetStockQuote(src as string));
// this will print just fine
Console.WriteLine(new StockQuoteServiceClient().GetStockQuote(src));
// this will never print and the application will hang with no exceptions
Console.WriteLine(channel.GetStockQuote(src));
- 上記のサービスは公開されており、私のものではありません。コードで提供されているエンドポイントにサービス参照を追加するだけで、このコードを自分でテストできます。
StockQuoteServiceClient
[サービス参照の追加] メニュー項目によって作成され、動的オブジェクトを正常に取得します。- これは魔法のように、デバッグ時に F5 キーを押してアプリケーションを起動すると発生せず、すべての行が出力され、プログラムは正常に終了します。
- それを実行し、実行中にデバッガをアタッチすると、への呼び出しでハングしていることがわかります
channel.GetStockQuote(src)
。 - そのままにしておくと、プログラムがすべてのメモリを消費します。
ChannelFactory
コメントで説明されているように、動的オブジェクトで独自のものを使用する場合にのみハングします。
ChannelFactory
Add Service Reference によって作成されたオブジェクトが正常に実行されるのに、動的オブジェクトをパラメーターとして受け取るとハングするのはなぜですか?