android soap2 wcf,WCF SOAP 1.2服务期望SOAP 1.1内容类型

我正在构建一个需要与非WCF客户端交互的WCF Web服务(事实上,将不会有WCF客户端)。

我已经使用SOAP 1.2(as per this example)编写了一个WSDL。我已经验证了WSDL,并且使用了这个文件(而不是由WCF生成的WSDL,这在表面上是不同的)创建了一个soapUI测试项目。

我有一个要求,Web服务将支持SOAP 1.2,所以我不能只是回到SOAP 1.1(在早期的原型中工作得很好)。

我使用WSCF.blue来生成我的WCF服务,接口和数据契约类。一切都很好地编译,如果我在浏览器中点击了WCF服务,那么终端会被暴露出来。一切似乎都与世界很好。

当我尝试从soapUi调用一个方法时,我从服务器得到以下响应(从soapUI可见):

HTTP/1.1 415 Cannot process the message because the content type

'application/soap+xml;charset=UTF-8;action="http://tempuri.org/FetchMyThing"'

was not the expected type 'text/xml; charset=utf-8'.

Server: Microsoft-IIS/7.5

X-Powered-By: ASP.NET

Date: Mon, 30 Apr 2012 08:15:29 GMT

Content-Length: 0

(为了这个问题的目的,实际的方法名称和命名空间已被手动更改。命名空间中的任何拼写错误都不是我的代码中的错误 – 只是打字这个问题的一个疏漏)

我知道SOAP 1.1规定内容类型必须是text / xml。 SOAP 1.2需要application / soap xml。

我的原始请求(根据soapUI):

POST http://localhost/MyWs.svc HTTP/1.1

Accept-Encoding: gzip,deflate

Content-Type: application/soap+xml;charset=UTF-8;action="http://tempuri.org/FetchMyThing"

xmlns:ns="http://tempuri.org">

从这个响应中,它告诉我,我的请求是正确的 – 它是一个具有正确内容类型的SOAP 1.2请求。然而,我的WCF服务并不期望这种内容类型,我认为这意味着我没有正确配置它,它仍然认为它是一个SOAP 1.1 Web服务。

Minimal Web.config,根据this blog post:

服务合同的片段:

[ServiceContract(Namespace = "http://tempuri.org")]

public interface IWsPort

{

[OperationContract(Action = "http://tempuri.org/FetchMyThing")]

[FaultContract(typeof(WsFault), Action = "http://tempuri.org/FetchMyThing", Name = "fetchMyThingFault")]

[XmlSerializerFormat(SupportFaults = true)]

FetchMyThingResponse FetchMyThing(FetchMyThingRequest request);

}

我为我的WCF服务启用了服务跟踪,并看到以下异常似乎证实了我的假设:

Activity: Listen at 'http://mycomputer/MyWs.svc

System.ServiceModel.ProtocolException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

Content Type application/soap+xml;charset=UTF-8;action="http://tempuri.org/FetchMyThing" was sent to a service expecting text/xml; charset=utf-8. The client and service bindings may be mismatched.

(erroneous detail snipped)

所以,我的合同和服务绑定可能是不匹配的,如果这个消息是相信的,但是从我对WCF的了解我的配置(或至少其背后的意图)是正确的。

有没有人有任何想法,我的配置有什么问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
WCF路由是一种将消息从一个端点路由到另一个端点的机制,可以在WCF服务中使用,也可以在非WCF环境中使用。在SOAP协议下,WCF路由可以通过以下步骤实现: 1. 创建一个路由服务,并为其配置路由表。路由表定义了输入消息如何被路由到目标服务。 2. 配置源服务,使其将消息发送到路由服务。可以通过配置终结点来实现。 3. 配置目标服务,使其能够接收路由服务转发的消息。同样可以通过配置终结点来实现。 4. 测试路由服务是否能够正确地将消息路由到目标服务。可以使用WCF Test Client或其他SOAP客户端来进行测试。 下面是一个简单的WCF路由示例,以演示如何实现SOAP协议下的WCF路由: 1. 创建一个名为“RoutingService”的路由服务,并为其配置路由表。在路由表中,将输入消息路由到目标服务的终结点上。 ```xml <system.serviceModel> <services> <service name="System.ServiceModel.Routing.RoutingService"> <endpoint address="" binding="basicHttpBinding" contract="System.ServiceModel.Routing.IRequestReplyRouter" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> <routing> <filters> <filter name="MyFilter" filterType="MatchAll" /> </filters> <filterTables> <filterTable name="MyFilterTable"> <add filterName="MyFilter" endpointName="MyEndpoint" /> </filterTable> </filterTables> </routing> <client> <endpoint name="MyEndpoint" address="http://localhost:8000/MyService" binding="basicHttpBinding" contract="IMyService" /> </client> </system.serviceModel> ``` 2. 配置源服务的终结点,使其将消息发送到路由服务。 ```xml <system.serviceModel> <services> <service name="MyService"> <endpoint address="" binding="basicHttpBinding" contract="IMyService" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> <client> <endpoint name="RoutingEndpoint" address="http://localhost:8001/RoutingService" binding="basicHttpBinding" contract="System.ServiceModel.Routing.IRequestReplyRouter" /> </client> </system.serviceModel> ``` 3. 配置目标服务的终结点,使其能够接收路由服务转发的消息。 ```xml <system.serviceModel> <services> <service name="MyService"> <endpoint address="" binding="basicHttpBinding" contract="IMyService" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> </system.serviceModel> ``` 4. 测试路由服务是否能够正确地将消息路由到目标服务。 可以使用WCF Test Client或其他SOAP客户端来测试路由服务是否能够正确地将消息路由到目标服务。在测试之前,确保源服务和目标服务都已启动,并且路由服务已被正确配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值