- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 WCF 和相关技术还很陌生。 (顺便说一句,使用 WCF 4.0。)
以下是我需要与之交互的 Web 服务的 WSDL 文件的一些片段。
<wsdl:binding name="MPGWCSTAOperations_v1_1SoapBinding" type="impl:MPGWCSTAOperations">
<wsdlsoap:binding transport="http://schemas.xmlsoap.org/soap/http" />
...
<wsdl:operation name="MonitorStartLine">
<wsdlsoap:operation soapAction="urn:v1_1.csta.ws.mpgw.gintel.com/MonitorStart" />
<wsdl:input name="MonitorStartLineRequest">
<wsdlsoap:body use="literal" />
</wsdl:input>
<wsdl:output name="MonitorStartLineResponse">
<wsdlsoap:body use="literal" />
</wsdl:output>
</wsdl:operation>
...
</wsdl:binding>
<wsdl:portType name="MPGWCSTAOperations">
...
<wsdl:operation name="MonitorStartLine" parameterOrder="monitorStartLine">
<wsdl:input name="MonitorStartLineRequest" message="impl:MonitorStartLineRequest" />
<wsdl:output name="MonitorStartLineResponse" message="impl:MonitorStartLineResponse" />
</wsdl:operation>
....
</wsdl:portType>
<wsdl:message name="MonitorStartLineResponse" />
我的理解是定义了MonitorStartLine操作返回响应消息MonitorStartLineResponse,定义为空消息。
我使用 Visual Studio 的项目 - 添加服务引用工具为此生成 C# 代理代码。
然后我做这样的事情:
MPGWCSTAOperationsClient cstaOperationsClient = new MPGWCSTAOperationsClient();
MonitorStartLine monitorStartLine = new MonitorStartLine();
monitorStartLine.pnis = new string[] {"0000032"};
cstaOperationsClient.MonitorStartLine(monitorStartLine);
这会导致以下异常:
System.ServiceModel.CommunicationException was unhandled
HResult=-2146233087
Message=Error in deserializing body of reply message for operation 'MonitorStartLine'.
End element 'Body' from namespace 'http://schemas.xmlsoap.org/soap/envelope/' expected.
Found element 'monitorStartLineResponse' from namespace 'urn:v1_1.csta.ws.mpgw.gintel.com'. Line 1, position 296.
Source=mscorlib
使用 Fiddler 我看到的响应如下:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Date: Wed, 16 Oct 2013 22:01:44 GMT
149
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<monitorStartLineResponse xmlns="urn:v1_1.csta.ws.mpgw.gintel.com"/>
</soapenv:Body>
</soapenv:Envelope>
在我看来它符合 WSDL。
我想我可以忽略这个错误(服务器永远不会更聪明),但如果可能的话我更愿意解决这个问题。
最佳答案
该消息符合 WSDL,但在 WSDL 规范不明确的地方。 .NET 在 Body
元素中不期望任何内容,因为没有定义任何消息部分。发件人正在发送一个空的 monitorStartLineResponse
元素,就像指定了一个消息部分一样,其中包含一个名为 monitorStartLineResponse
的元素。
由于 WSDL 规范不明确的区域,Web Services Interoperability Organization成立。 WS-I Basic Profile 1.1规范的开发是为了指定 WSDL 的一个子集,保证可以跨平台互操作。
此 WSDL 不符合 WS-I BP 1.1。
事实上,从阅读 WSDL 1.1 spec ( section 3.4, soap:operation ),我看到这将被视为“文档-文字绑定(bind)”,因为没有“样式”属性另有说明。
在4.4.1, Bindings and Parts部分,R2213,WS-I BP 1.1 规范说:
R2213 In a doc-literal description where the value of the parts attribute of
soapbind:body
is an empty string, the corresponding ENVELOPE MUST have no element content in thesoap:Body
element.
这是 .NET 所期望的,但不是 .NET 所接收的。
关于将 WSDL 中定义的响应反序列化为空消息时,WCF 使用 SOAP 会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19416826/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!