WCF 和肥皂 1.1
Posted
技术标签:
【中文标题】WCF 和肥皂 1.1【英文标题】:WCF and Soap 1.1 【发布时间】:2011-01-14 20:17:10 【问题描述】:我正在尝试创建第 3 方应该使用的服务。 消费者与 SOAP 1.1 兼容,这就是我在服务器上使用 basicHttpBinding 的原因。当发出实际请求时,服务器预期的内容类型似乎出现了问题。使用 basicHttpBinding 我不明白为什么服务器仍然需要“application/soap+xml”,据我所知,只有 SOAP 1.2 才需要它。 我已经使用wireshark 来弄清楚这两个人在交流什么。请参阅下面的 tcp 流和设置。 任何帮助表示赞赏。
第三方应用请求
POST / HTTP/1.1
SOAP 动作: http://tempuri.org/ITestService/Hello
内容类型:文本/xml;字符集=utf-8
主机:shdesktop:8000
内容长度:297
期望:100-继续
连接:关闭
WCF 服务器响应
HTTP/1.1 415 无法处理 消息,因为内容类型 '文本/xml; charset=utf-8' 不是 预期类型'应用程序/soap+xml; charset=utf-8'。
内容长度:0
服务器:Microsoft-HTTPAPI/2.0
日期:格林威治标准时间 2010 年 2 月 9 日星期二 14:03:19
连接:关闭
服务配置
<system.serviceModel>
<services>
<service behaviorConfiguration="behTestService" name="ConsoleApplication1.TestService">
<endpoint address="" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="TestService" binding="basicHttpBinding"
contract="ConsoleApplication1.ITestService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="behTestService">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
【问题讨论】:
【参考方案1】:我遇到了完全相同的问题 - 定义说它是 soap 1.2,但由于内容类型不同,所以期望 1.1。
我发现如果我从以下位置调整我的服务器配置:
...
<endpoint address="" .../>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001/services/fooService" />
</baseAddresses>
</host>
...
收件人:
...
<endpoint address="fooService" .../>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001/services" />
</baseAddresses>
</host>
...
这次 wsdl 将其公开为 Soap 1.1。
【讨论】:
【参考方案2】:basicHttpBinding
确实使用 SOAP 1.1 - 但在这种情况下,您将拥有 application/soap+xml
的内容类型。
由于您的客户正在发送text/xml
- 他们是否有可能期待 REST 接口?这将由 WCF webHttpBinding
处理。
在MSDN WCF REST Developer Center 上阅读有关 WCF 中 REST 的更多信息,并查看 Pluralsight screencast series on WCF REST - 强烈推荐!
【讨论】:
哦,SOAP 1.1 会使用 'application/soap+xml' 吗?明天我会测试webHttpBinding,谢谢!我知道当我创建一个简单的 asmx 服务时它会起作用,如果它有什么不同的话。 @Silas: "旧式" ASP.NET webservices (ASMX) 和 WCF basicHttpBinding 使用 SOAP 1.1 - 所以应该没问题,真的。您需要检查您的客户端是否正在向您发送 SOAP 请求,或者只是尝试将 XML 发布到您的 URL 我调用的是 http://通常当我们在包含文本的网络服务中收到消息/错误时:
content type 'text/xml'
这意味着 Web 服务器返回了一个错误页面,而不是预期的 xml 响应。
【讨论】:
以上是关于WCF 和肥皂 1.1的主要内容,如果未能解决你的问题,请参考以下文章