我们已经使用了第三方Web服务,并且正在尝试从ASP.NET Web应用程序调用它。 但是,当我实例化Web服务时,抛出以下System.InvalidOperationException异常:
无法反映方法'ABC.XYZ'。 System.InvalidOperationException: 方法'ABC.XYZ'无法反映。 ---> System.InvalidOperationException:来自命名空间的XML元素“MyDoc” 'http://mysoftware.com/ns'引用 方法和类型。改变 方法的消息名称使用 WebMethodAttribute或更改 使用的类型的根元素 XmlRootAttribute。
从我可以收集的内容来看,Web服务中的方法和类型之间似乎存在一些歧义。 任何人都可以澄清这个例外的可能原因,有什么我可以做的来纠正这个或者我应该去网络服务所有者纠正吗?
编辑:Visual Studio 2008创建了代理类。不幸的是,我无法提供wsdl的链接,因为它是本地安装的第三方应用程序的Web服务。
答案 0 :(得分:14)
我今天早些时候遇到了同样的问题。 原因是 - 由Visual Studio生成并作为参数传递给其中一个方法的类没有默认的无参数构造函数。一旦我添加它,错误就消失了。
答案 1 :(得分:3)
似乎问题在于VS和用Java编写的Web服务之间的数据类型问题。
最终通过手动编辑由VS创建的类和模式文件来修复它。
答案 2 :(得分:2)
当我使用第三方网络服务时,我遇到了完全相同的问题。此实例中的问题是引用文件中的mustUndertand属性正在查找布尔值,其中namespace属性查找字符串。
通过查看引用,我能够识别有问题的属性,只需在方法签名中添加“覆盖”即可。
不理想,因为任何时候你必须更新服务,但我找不到任何其他方法。
要查找参考文件,请从解决方案资源管理器中选择“所有文件”
希望这有帮助
答案 3 :(得分:1)
我猜测服务发出或提供的wsdl不是wsdl.exe或serviceutil可以理解的形式 - 你可以发布wsdl或链接吗?
你是如何创建代理类的?
此外,您可能希望尝试针对wsdl架构验证wsdl以检查其有效
答案 4 :(得分:1)
在我的情况下,我得到了一个“方法无法反映”错误,因为在方法返回的类中,我无法公开默认的无参数构造函数。
我在VB.NET工作。在我的返回类中,我声明了一个“New(..)”方法,它采用了几个参数(因为这就是我想在我的代码中使用它的方式)。但是通过这样做,我已经压制了VB在幕后添加的默认(隐藏)无参数New()构造函数。显然,Web服务处理程序要求无参数构造函数可用。一旦我向我的类中添加了一个无参数的New()构造函数,它一切正常。
答案 5 :(得分:0)
我得到了同样的消息,但是我的错误是System.Runtime.Serialization.dll引起的,因为我试图在只安装了.NET 2.0的机器上运行3.5应用程序。
答案 6 :(得分:0)
我遇到了同样的问题,但我发现其中一个WebMethod
参数的成员类型为interface
,这就是VS
无法将其序列化的原因。尝试下载disco
文件
System.InvalidOperationException:无法序列化成员 'Leopard.JobDespatchParameters.SendingUser' 'Leopard.Interfaces.IUser'类型,请参阅内部异常了解更多信息 细节。 ---> System.NotSupportedException:无法序列化成员 Leopard.JobDespatchParameters.SendingUser 类型为Leopard.Interfaces.IUser,因为它是一个接口。
答案 7 :(得分:0)
旧线程,但我有一个不同的问题,也许对某人有帮助。引用的dll在数据层和服务层上的两个版本之间混淆,导致了问题。
答案 8 :(得分:0)
可能发生此错误的另一种情况:我只是在我的Web服务中使用了另一个具有相同名称(但参数不同)的Web方法,该方法在代码合并期间滑入。删除旧方法后,它有效。