0

接口 IService

 <OperationContract(Action:="urn:abc")> _
 <WebInvoke(BodyStyle:=WebMessageBodyStyle.Bare, Method:="POST")>
 Function abc(a as String) As String

方法服务

Public Function abc(a as String) As String Implements IService.abc
       'Method
    End Function

网络配置

<services>
      <service name="Service.IServices">
        <endpoint address="" binding="customBinding" contract="Service.IServices" bindingConfiguration="httpSoap12">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <customBinding>
    <binding name="httpSoap12">
      <textMessageEncoding messageVersion="Soap12" />
      <httpTransport />
    </binding>
  </customBinding>

请求消息

POST http://localhost/Services.svc HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/soap+xml;charset=UTF-8;action="urn:abc"
Content-Length: 1230
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

错误

反序列化操作“abc”的请求消息正文时出错。OperationFormatter 遇到无效的消息正文。预计会找到名称为“abc”和命名空间“ http://tempuri.org/ ”的节点类型“元素”。找到名称为“typ:abc”和命名空间“ http://tem.com/ ”的节点类型“元素”

几天我遇到了这个错误,我在网上找到了很多解决方案,但仍然面临这个错误。有任何建议或解决方案来解决它吗?我不是还没有行动吗?

4

2 回答 2

1

我的建议是将您的字符串转换为字节数组并在每一侧对其进行编码/解码。我厌倦了在我的 Web 服务中遇到这样的奇怪问题,所以现在我的 Web 服务上的每个方法都接收字节数组并返回字节数组。它不会为它们增加任何时间,因为无论如何 Web 服务最终都会这样做。

有关示例net-string-to-byte-array,请参阅此帖子

于 2013-10-17T15:43:36.107 回答
0

我不确定这是否会有所帮助,但我在想要流式传输数据而不是缓冲数据的服务中遇到了类似的错误。有些人可能不知道,但是将传输模式更改为流式传输需要一定的设计模式 - 否则,它只会恢复为缓冲。所以,我按照设计模式,遇到了同样的错误。我解决了。这是我的答案的帖子:

流式传输:消息合同错误

于 2014-05-08T17:17:43.103 回答