跟进我在这里提出的上一个问题的解决方案。看来我现在有一个问题,如果我在我的 .NET4 Web 服务中使用自定义绑定,那么当我实现 Web 服务 WebInvoke 合同的方法包含请求主体 Stream 的参数时,它们将不再被调用。
因此,这是从上面的链接中找到的运行 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 形式的)。所以我只能收集到我在自定义绑定中遗漏了一些东西,以确保可以传递请求的主体流。有人有任何线索吗?