【问题标题】:Method 'XYZ' cannot be reflected无法反映方法“XYZ”
【发布时间】:2023-03-03 16:05:02
【问题描述】:

我们使用了第三方 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 服务。

【问题讨论】:

    标签: asp.net web-services exception reflection


    【解决方案1】:

    可能发生此错误的另一种情况:我只是在我的 Web 服务中有另一个具有相同名称(但参数不同)的 Web 方法,它在代码合并期间滑入。在我删除旧方法后它起作用了。

    【讨论】:

      【解决方案2】:

      旧线程,但我有一个不同的问题,也许对某人有帮助。引用的 dll 在导致问题的数据层和服务层的两个版本之间混合。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,但我发现WebMethod 参数之一有一个interface 类型的成员,这就是VS 无法序列化它的原因。这是尝试下载disco 文件时的例外情况

        System.InvalidOperationException:无法序列化成员 'Leopard.JobDespatchParameters.SendingUser' 'Leopard.Interfaces.IUser' 类型的,请参阅内部异常了解更多信息 细节。 ---> System.NotSupportedException:无法序列化成员 Leopard.JobDespatchParameters.SendingUser Leopard.Interfaces.IUser 类型,因为它是一个接口。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            • 你为我节省了几个小时,,,,
            • 并且余额已经恢复——我在找到这篇文章之前损失了 5 个小时
            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

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

              【讨论】:

              • 您将此标记为答案,但实际上忘记提及您是如何解决的?
              • @BobSort 抱歉,很久以前就记得我做了什么,但它会按照手动更新 VS 创建的代理类来访问服务以使用数据类型这是期待的。
              • 实际上我也设法修复了它,生成了一个与webservice方法同名的属性类。我重命名了这个类并且它修复了
              • 我想你也让我很头疼。我添加了一些基于 .xsd 的部分类,并添加了一个默认 ctor 就可以了。谢谢!
              【解决方案8】:

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

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

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

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

              希望对你有帮助

              【讨论】:

                【解决方案9】:

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

                你是如何创建代理类的?

                您也可能想尝试根据 wsdl 架构验证 wsdl 以检查其是否有效

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2012-03-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-10-28
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-10-12
                  • 1970-01-01
                  相关资源
                  最近更新 更多