2011-09-29 84 views
0

我在.NET 4中使用C#,并试图使用java web服务。我的代码是通过添加.net 2.0样式的webservice引用自动生成的。我相信这是与.NET是发送到java web服务类型的问题,这是我收到异常当我尝试连接:.Net调用Java Webservice,我需要将XMLSchema/long转换为XMLSoap/long

Internal Server Error (deserialization error: deserialization error: unexpected element type: expected={http://schemas.xmlsoap.org/soap/encoding/}long, actual={http://www.w3.org/2001/XMLSchema}long) 

旧文件从WebService: 当序列化对象的SOAP消息,Microsoft .NET平台将所有基元映射到W3C XML 模式类型。这与.NET平台一起使用 编码的RPC SOAP消息时,无法区分基元和原始包装(通过自动装箱),从而导致Sun One Web服务存在互操作性问题。 在Java编程语言中,原语和它们的等价对象包装不能被自动装箱 因此在语言中有所区别。 当Web服务在Sun One下生成和部署时,服务器端WSDL将Java原始图映射到W3C模式类型,并将Java对象映射到SOAP模式类型。

有谁知道我可以告诉.net发送一个长而不是http://www.w3.org/2001/XMLSchema}长吗?

谢谢! AFrieze

+0

你是如何在C#中编写/获取客户端的?你是否自动生成它? wsdl是什么样的?它是doc风格还是rpc风格?给一些细节 – Bhaskar

+0

我添加了一些更多的细节Bhaskar ...希望它可以帮助! – AFrieze

回答

0

建议您尝试将样式更改为Document。这样,当您生成wsdl时,您会发现一个<type></type>部分列出了该服务使用的所有数据类型。本节还将有一个namespace元素,它本质上是导致现在问题的原因,但这并不明显,因为对于RPC服务类型,wsdl不包含类型的部分。我假设encodingliteral

编辑:

我应该先猜对了,但它似乎是你的服务使用encoded类型,而不是literal。关于编码服务的一件事是它们总是容易出现互操作性问题。我的建议:不要使用rpc /编码 - 使用文档/文字。

+0

嗨Bhaskar,我正在查看生成的wsdl文件,我看到类型部分。抛出错误的变量的类型设置为“soap-enc:long”,这应该是正确的。但是,.net调用该服务时,它不会发送长整型的soap版本。有什么想法吗? – AFrieze

+0

我也只是从web服务添加一些文档到原来的问题,这可能会有所帮助。 – AFrieze

+0

@AFrieze,看我的编辑。 – Bhaskar