1

我正在尝试使用 C# 使用 wsdl Web 服务(java)。我添加了服务引用并实现了 webmethod 调用,但它返回以下错误:格式化程序在尝试反序列化消息时抛出异常:

尝试反序列化参数http://services.company.companyname.com.br:methodNameResponse时出错。InnerException 消息是“第 1 行位置 456 中的错误”。不应出现命名空间“ http://services.company.companyname.com.br ”中的“EndElement”“methodNameReturn”。期待元素'idSomething'。'。有关更多详细信息,请参阅 InnerException。

我已经尝试了很多东西,比如大小限制、在主机文件上添加 ip 等,但没有成功。有人有想法吗?

代码是:

var ws = new webService(); //invoked using the service reference
var return = ws.methodName("x", "CAY", "5454545", "XXXX", "xxx", "09/07", "A", 1,
                                               "23/04/2013", "23/04/2013", "15:00", "17:00");

ws.methodName 返回错误。

我已经尝试过请求和响应对象并得到了同样的错误。

我使用网络参考进行了测试。我有一种方法不会返回错误,但我需要更改参考文件,在调用的方法上方注释以下行:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://dto.services.company.trielo.com.br")]

我正在发布 wsdl:http://177.140.208.200:8998/mdc4web/services/VisitantesSASweb?wsdl

4

2 回答 2

3

我发现 Visual Studio 生成的代理类和服务 WSDL 之间可能存在两个问题

查看代理生成的文件:

第一个错误是 RetVisSRV 类中 XmlTypeAttribute 属性的命名空间参数

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://dto.services.mdc4web.trielo.com.br")]

您需要删除“dto”。

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://services.mdc4web.trielo.com.br")]

第二点是“lst”数组声明的 XmlArrayItemAttribute 处的 elementName 参数。

[System.Xml.Serialization.XmlArrayItemAttribute("item", Namespace="http://services.mdc4web.trielo.com.br", IsNullable=false)]

正确的“lst”

[System.Xml.Serialization.XmlArrayItemAttribute("lst", Namespace="http://services.mdc4web.trielo.com.br", IsNullable=false)]

在这些更改之后应该可以正常工作。

这个命名空间问题是 AXIS 和 .NET 客户端之间的一个已知问题,但我不知道为什么还没有解决

请参阅https://issues.apache.org/jira/browse/AXIS-2449

希望这可以帮助

于 2013-04-29T18:55:30.780 回答
1

之间...

InnerException 消息是“第 1 行位置 456 中的错误”。不应出现命名空间“ http://services.company.companyname.com.br ”中的“EndElement”“methodNameReturn”。期待元素'idSomething'。'。有关更多详细信息,请参阅 InnerException。

...和...

InnerException 是“第 1 行位置 456 中的错误。不期望来自命名空间 ' http://services.company.companyName.com.br ' 的 'EndElement''somethingReturn'。期望元素 'idSomething'。”} 和 InnerException 消息一片空白。

听起来好像 Web 服务的响应内容违反了用于反序列化它的模式(基本上我认为 Barrakoda 正在得到什么)——尽管如果没有看到响应内容本身和模式定义(可能通过对http://services.company.companyname.com.br的命名空间引用)。

于 2013-04-24T20:21:05.357 回答