ここで尋ねた前の質問への解決策からフォローアップします。.NET4 Web サービスでカスタム バインディングを使用すると、Web サービス WebInvoke コントラクトを実装するメソッドが、リクエスト ボディ ストリームの引数を含む場合に呼び出されなくなるという問題があるようです。
したがって、上記のリンクから見つけた Web サービスを実行するコードは次のとおりです。
webserviceHost = new WebServiceHost(typeof(Service1), new Uri("http://localhost:8080));
webserviceHost.AddServiceEndpoint(typeof(IService), getBinding(), "webservice").Behaviors.Add(new WebHttpBehavior());
webserviceHost.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
webserviceHost.Open();
定義された WebInvoke サービス コントラクトは次のとおりです。
[WebInvoke(UriTemplate = "import_data?param={value}", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
WebResult importOrder(string value, Stream httpRequestPostBody);
上記のコントラクトを実装するメソッドは次のとおりです。
public WebResult importOrder(String value, Stream httpRequestPostBody)
{
doSomething(value, httpRequestPostBody);
}
したがって、Fiddler を介して Web サービス エンドポイント コントラクトに HTTP 要求を送信しようとすると、接続リセット HTTP エラー応答が返されます。Stream httpRequestPostBody 引数を削除すると、メソッドが実行されますが、リクエスト本文の生の JSON データにアクセスする方法がありません (本文は取得できますが、XML 形式です)。そのため、リクエストの本文ストリームを確実に渡すために、カスタム バインディングに何かが欠けていることだけを収集できます。手がかりを得た人はいますか?