400从嵌入式客户端连接到WCF SOAP MTOM样本的错误请求[英] 400 Bad Request connecting to WCF SOAP MTOM sample from embedded client

本文是小编为大家收集整理的关于400从嵌入式客户端连接到WCF SOAP MTOM样本的错误请求的处理方法,想解了400从嵌入式客户端连接到WCF SOAP MTOM样本的错误请求的问题怎么解决?400从嵌入式客户端连接到WCF SOAP MTOM样本的错误请求问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我在这里基于 CodeProject 示例创建了一个简单的 WCF MTOM 服务:<http://www.codeproject.com/Articles/632101/Mtom-Encoding-in-WCF>

我使用在 Windows 10 机器上运行的 IIS Express 托管它.我可以使用 .NET 客户端连接到它,并且我已经捕获了 HTTP 请求和响应.现在我想使用嵌入式客户端连接到该服务.

作为第一步,我尝试使用客户端机器上的 telnetT

捕获的HTTP请求多部分消息如下所示:

POST/Service1.svc HTTP/1.1MIME 版本:1.0内容类型:多部分/相关;type="application/xop+xml";start="<http://tempuri.org/0>";boundary="uuid:34450500-f156-44c4-9029-39b25c2794d5+id=2";start-info="应用程序/soap+xml";VsDebuggerCausalityData:uIDPo1KWW5y3uwVDgCIgEESskYMAAAAAMvkL+qgn/EOABoi12Ti65Uyk1HOupMNEqOqG7glAPv4ACQAA主机:192.168.0.10:8080内容长度:865期望:100-继续接受编码:gzip,放气--uuid:34450500-f156-44c4-9029-39b25c2794d5+id=2内容 ID:<http://tempuri.org/0>内容传输编码:8bit内容类型:application/xop+xml;charset=utf-8;type="application/soap+xml";<s:信封 xmlns:s="http://www.w3.org/2003/05/soap-envelope"xmlns:a="http://www.w3.org/2005/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://tempuri.org/IService1/StoreData</a:Action><a:MessageID>urn:uuid:c6cb5104-adfd-4040-a2eb-a2cb659e8f2a</a:MessageID><a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">http://192.168.0.10:8080/Service1.svc</a:To></s:Header><s:Body><StoreData xmlns="http://tempuri.org/"><device>22222</device><time>2016-01-10T14:34:54.2151851-06:00</time><data>AwIB</data></StoreData></s:Body></s:信封>--uuid:34450500-f156-44c4-9029-39b25c2794d5+id=2--

当我使用 Telnet 发送此内容时,我收到状态 400 Bad request.

如果我将请求简化为单个消息(而不是多部分),我会得到正确的响应.简单的请求如下所示:

POST/Service1.svc HTTP/1.1内容类型:应用程序/soap+xml主机:192.168.0.10:8080内容长度:611<s:信封 xmlns:s="http://www.w3.org/2003/05/soap-envelope"xmlns:a="http://www.w3.org/2005/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://tempuri.org/IService1/StoreData</a:Action><a:MessageID>urn:uuid:c6cb5104-adfd-4040-a2eb-a2cb659e8f2a</a:MessageID><a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">http://192.168.0.10:8080/Service1.svc</a:To></s:Header><s:Body><StoreData xmlns="http://tempuri.org/"><device>22222</device><time>2016-01-10T14:34:54.2151851-06:00</time><data>AwIB</data></StoreData></s:Body></s:信封>

(抱歉缺少换行符.)

我尝试最小限度地扩展简单案例以获得成功的多部分请求,但我继续获得状态 400 Bad Request.这是我最近尝试生成一个简单的多部分请求.我找到了很多很好的资料此处 为使用 WCF 的 MTOM 消息提供指南,

POST/Service1.svc HTTP/1.1MIME 版本:1.0内容类型:multipart/related;type="application/xop+xml";start="<http://tempuri.org/0>";boundary="GATES";start-info=""文本/xml"主机:192.168.0.10:8080内容长度:770--盖茨内容 ID:<http://tempuri.org/0>内容传输编码:8bit内容类型:application/xop+xml;charset=utf-8;type="text/xml";<s:信封 xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"xmlns:a="http://www.w3.org/2005/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://tempuri.org/IService1/StoreData</a:Action><a:MessageID>urn:uuid:c6cb5104-adfd-4040-a2eb-a2cb659e8f2a</a:MessageID><a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">http://192.168.0.10:8080/Service1.svc</a:To></s:Header><s:Body><StoreData xmlns="http://tempuri.org/"><device>22222</device><time>2016-01-10T14:34:54.2151851-06:00</time><data>AwIB</data></StoreData></s:Body></s:信封>--盖茨--

所以,有几个问题...

  1. 有人知道我在这里做错了什么吗?
  2. 我如何从服务器端获取更多信息,了解发生了什么问题(导致错误请求的原因).
  3. 是否有人知道我可以使用任何公共 MTOM 服务来测试我的客户?

谢谢!

解决方案

400表示Web服务器通过400吞下了真正被抛出的异常 由程序, 你会以某种方式对其进行挖掘和调试.

Fiddler 可能有助于调试.


本文地址:https://www.itbaoku.cn/post/1355825.html