8

我们使用了第三方 Web 服务并尝试从 ASP.NET Web 应用程序调用它。但是,当我实例化 Web 服务时,会引发以下 System.InvalidOperationException 异常:

无法反映方法“ABC.XYZ”。System.InvalidOperationException:无法反映方法“ABC.XYZ”。---> System.InvalidOperationException:命名空间“ http://mysoftware.com/ns ”中的 XML 元素“MyDoc ”引用了一个方法和一个类型。使用 WebMethodAttribute 更改方法的消息名称或使用 XmlRootAttribute 更改类型的根元素。

据我所知,Web 服务中的方法和类型之间似乎存在一些歧义。任何人都可以澄清这个异常的可能原因吗?我能做些什么来纠正这个问题,或者我应该去网络服务所有者纠正吗?

编辑:Visual Studio 2008 已经创建了代理类。不幸的是,我无法提供 wsdl 的链接,因为它是本地安装的第三方应用程序的 Web 服务。

4

9 回答 9

14

我今天早些时候遇到了同样的问题。原因是 - 由 Visual Studio 生成并作为参数传递给其中一种方法的类没有默认的无参数构造函数。一旦我添加了它,错误就消失了。

于 2011-12-02T19:19:32.123 回答
3

似乎问题归结为 VS 和用 Java 编写的 Web 服务之间的数据类型问题。

最终通过手动编辑由 VS 创建的类和模式文件来修复它。

于 2009-01-13T15:32:51.777 回答
2

当我使用 3rd 方网络服务时,我遇到了完全相同的问题。此实例中的问题是参考文件中的 mustUndertand 属性正在寻找一个布尔值,而命名空间属性正在寻找一个字符串。

通过查看引用,我能够识别有问题的属性并简单地将“覆盖”添加到方法签名中。

不理想,因为任何时候更新服务都必须这样做,但我找不到任何其他方法。

要查找参考文件,请从解决方案资源管理器中选择“所有文件”

希望这可以帮助

于 2008-09-25T18:48:47.150 回答
1

我猜该服务发出或提供的 wsdl 不是 wsdl.exe 或 serviceutil 可以理解的形式 - 您可以发布 wsdl 或链接到它吗?

你是如何创建代理类的?

此外,您可能想尝试根据 wsdl 模式验证 wsdl 以检查其有效

于 2008-09-25T11:50:43.627 回答
1

在我的情况下,由于在方法返回的类中,我未能公开默认的无参数构造函数,因此出现“方法无法反映”错误。

我在 VB.NET 中工作。在我的返回类中,我声明了一个带有几个参数的“New(..)”方法(因为这就是我想在我的代码中使用它的方式)。但是通过这样做,我抑制了 VB 在幕后添加的默认(隐藏)无参数 New() 构造函数。显然,Web 服务处理程序要求无参数构造函数可用。一旦我在我的类中添加了一个无参数的 New() 构造函数,它就一切正常了。

于 2012-02-02T01:26:04.947 回答
0

我收到了同样的消息,但我的消息是由于缺少 System.Runtime.Serialization.dll 引起的,因为我试图在仅安装 .NET 2.0 的机器上运行 3.5 应用程序。

于 2009-05-25T13:26:22.213 回答
0

我有同样的问题,但我发现其中一个WebMethod参数有一个类型的成员,interface这就是为什么VS不能序列化它。这是尝试下载disco文件时的例外

System.InvalidOperationException: Cannot serialize member 'Leopard.JobDespatchParameters.SendingUser' of type 'Leopard.Interfaces.IUser', see inner exception for more details. ---> System.NotSupportedException: Cannot serialize member Leopard.JobDespatchParameters.SendingUser of type Leopard.Interfaces.IUser because it is an interface.

于 2013-07-10T05:52:04.727 回答
0

Old thread but I had a different issue, Maybe of help to someone. referenced dlls were mixed up between two versions on data layer and service layer that caused the problem.

于 2014-11-12T11:11:55.123 回答
0

Another scenario where this error can happen: I simply had another web method with the same name (but different parameters)in my web service that slipped in during a code merge. After I deleted the old method it worked.

于 2016-07-22T14:39:46.013 回答