我需要一些帮助将一些 XML 发布到 WCF 服务。从本质上讲,我遇到的问题是“400:错误请求”的 HTTP 响应 - 听起来很具有描述性,但我正在努力寻找任何答案!
首先,我在 WCF 中构建的服务基于现有的 WSDL,最初来自 IBM WebSphere Web 服务。经过一些操作(删除 MIME 附件,下载一些远程模式)后,我设法让 svcutil 生成一个服务接口,该接口对于所有意图和目的似乎都是有效的。
我已经在我的 WCF 服务中实现了该接口,并且在运行 WCF 测试客户端时,我可以附加到该服务,提交请求并接收响应没有问题。到目前为止,一切都很好!
当移动到通过 HttpWebRequest 类将 XML 发布到 Web 服务的测试应用程序时,我开始收到“400:错误请求”响应,即使我使用的是 WCF 测试客户端提供的 XML。
我已经使用 WCF 跟踪来转储它正在接收的消息,并且有一个显着的区别 - 所有 WCF 测试客户端消息都正确填充并显示它们的标头信息等,我的 SOAP 测试实用程序中的所有一次都显示为“畸形”。查看消息选项卡,我发送的手动 POST 消息将正文包裹在一个元素中:
<MessageLogTraceRecord><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:57567/Service1.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.nowhere.co.uk/RequestService/RequestOperation</Action>
</s:Header>
</s:Envelope>
]]></MessageLogTraceRecord>
而 WCF 消息显示为:
<MessageLogTraceRecord>
<HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace">
<Method>POST</Method>
<QueryString></QueryString>
<WebHeaders>
<Connection>Keep-Alive</Connection>
<Content-Length>185</Content-Length>
<Content-Type>text/xml; charset=utf-8</Content-Type>
<Accept-Encoding>gzip, deflate</Accept-Encoding>
<Expect>100-continue</Expect>
<Host>localhost:57567</Host>
<VsDebuggerCausalityData>uIDPo4VLDcJD5AZDjB5sdmoeakEAAAAAH/hWABuWQ0iiq47QDHh0GlelCLcEx7FLibxRvpq1tTgACQAA</VsDebuggerCausalityData>
<SOAPAction>"http://www.nowhere.co.uk/RequestService/RequestOperation"</SOAPAction>
</WebHeaders>
</HttpRequest>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:57567/Service1.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.nowhere.co.uk/RequestService/RequestOperation</Action>
</s:Header>
</s:Envelope>
</MessageLogTraceRecord>
我尝试在 Fiddler 中进行跟踪无济于事 - 尽管修改了它的 app.config 文件,但我无法让 WCF 测试客户端通过它创建的代理提交请求。我已经跟踪了我的 SOAP 请求,但是可以看到以下内容:
Content-Type: text/xml; charset="utf-8"
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:57567
SOAPAction: "http://www.nowhere.co.uk/RequestService/RequestOperation"
Content-Length: 459
Expect: 100-continue
Connection: Keep-Alive
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:57567/Service1.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.nowhere.co.uk/RequestService/RequestOperation</Action>
</s:Header>
</s:Envelope>
据我所知,我发送的消息应该没问题 - 在标题和消息内容之外,我看不到还能发送什么。
我要说的最后一件事是,我绝不是 WCF 专家,由于商业敏感性,我不得不更改特定的 SOAPAction 值。
任何人都可以为这个相当令人沮丧的问题提供任何帮助吗?
提前致谢