反序列化操作'abc'的请求消息体时出错

时间:2013-10-17 09:32:39

标签: vb.net wcf web-services

接口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

的Web.Config

<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遇到无效的Message正文。预计会找到名为“abc”的节点类型“Element”和名称空间“http://tempuri.org/”。找到名为“typ:abc”和名称空间“http://tem.com/

的节点类型“Element”

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

2 个答案:

答案 0 :(得分:1)

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

有关示例net-string-to-byte-array

,请参阅此帖子

答案 1 :(得分:0)

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

Streaming: Message Contract Error