C# · 12月 31, 2021

编写C#客户端以使用返回数组对象的Java Web服务

我正在编写一个C#客户端,调用一个用 Java编写的Web服务(由另一个人).我已经添加了一个web引用到我的客户端,我可以调用方法在web服务ok.

该服务已更改为返回一组对象,并且客户端未正确解析返回的SOAP消息.

MyResponse[] MyFunc(string p)class MyResponse{ long id; string reason;}

当我生成的C#代理调用Web服务(使用SoapHttpClientProtocol.Invoke)时,我期待一个长度为1的MyResponse []数组,即单个元素.在Invoke调用之后我得到的是id = 0和reason = null的元素,无论服务实际返回.使用数据包嗅探器,我可以看到服务正在返回看起来是一个合法的SOAP消息,其ID和原因设置为非空值.

有一些技巧让C#客户端调用返回一个对象[]的Java Web服务?如果有必要,我将致力于一个消毒的演示.

编辑:这是通过“添加Web引用…”的Web引用. VS 2005,.NET 3.0.

解决方法 已经有一段时间了,但是我似乎记得在.Net和Java Web服务之间如何处理默认的命名空间方面的细微差异.

仔细检查生成的c#代理类和在其中声明的任何命名空间(特别是默认值xmlns =“”),这与Java服务期望的一样.可能会有非常微妙的差异,您将不得不重新创建.

如果是这种情况,那么您将在c#属性中提供更多的命名空间声明.