【问题标题】:WSDL Cannot find dispatch method forWSDL 找不到调度方法
【发布时间】:2011-09-19 23:16:26
【问题描述】:

对于使用 WSDL 的 Web 服务调用,我收到错误 Cannot find dispatch method for {http://ws.somecompany.com/services}ValidateUser,这到底是什么意思?是不是说找不到ValidateUser

【问题讨论】:

    标签: soap wsdl


    【解决方案1】:

    这通常意味着 SOAP 框架找不到应通过此请求调用的操作。 SOAP 框架通常检查消息以查找有关如何将消息路由到操作的指针。此错误的原因主要是配置问题(不同的命名空间、不同的编码(RPC 与 doc/lit)、WS-Addressing 与普通 SOAP 的使用等)

    【讨论】:

    • 如果您使用的是 Visual Studio,这里有一个快速修复。右键单击解决方案资源管理器中 Web 引用文件夹中的 Web 服务,选择更新 Web 服务。等待VS完成这个过程,你就完成了
    • 在我的情况下,问题是在<message><part> 中引用的<element><operation><input> 中引用没有相同的命名空间作为<operation>。它还应该具有相同的名称以避免输入参数的换行。
    【解决方案2】:

    我遇到了类似的问题,并且在谷歌上搜索了 1 天。但这是一个简单的错误,而不是:

    {http://ws.somecompany.com/services}ValidateUser
    

    应该是

    {http://ws.somecompany.com/services/}ValidateUser
    

    我没有清楚地检查我的 WSDL。

    【讨论】:

    • 是的,这些很讨厌。还有一个常见的错误是忽略了命名空间 URI 中 http 和 https 之间的区别。
    【解决方案3】:

    在我的情况下,我通过确保我的配置文件 app.config 或 web.config 取决于您的客户端具有正确的端点来解决。我的端点地址错误。我改变了它,它工作得很好。

    【讨论】:

      【解决方案4】:

      我也为这个问题浪费了一天的时间,尽管根本原因不同。

      在我们的例子中,两个相似的端点 url 在属性文件中混在一起了。两个服务都存在并正在运行,但 WSDL 不匹配,因此我们得到的不是 ConnectionException,而是 SOAPFaultException:“找不到调度方法”。

      【讨论】:

        【解决方案5】:

        我的 50 美分,我收到了同样的错误消息,但我的情况与上述情况不同,所以希望它可以帮助某人。

        我有 .wsdl 文件,当 ws 另一边的同事重命名某些元素时,该文件在我不知情的情况下已过时。不幸的是,当我将 .wsdl 与他们的比较时,变化是不可见的,因为 .wsdl 文件具有 .xsd 导入,它实际上包含重命名的元素。找到更改后,我更新了我的 .xsd 文件和 tada!错误消失了,它起作用了。

        【讨论】:

          【解决方案6】:

          在我的情况下,即使我提供了所有参数,也会引发以下异常

          SoapFault exception: [S:Client] Cannot find dispatch method for {}parameters in
          

          敲了几个小时后,在初始化 SoapClient 时添加一个 \ 就解决了这个问题。

          发件人:

          $client = new SoapClient($soapURL);
          

          收件人:

          $client = new \SoapClient($soapURL);
          

          【讨论】:

            【解决方案7】:

            我在 .NET 应用程序中遇到了同样的问题,在我的情况下,将 url 设置为“http://x-xxx-xx-xx-01:8080//TestProject/testproject?wsdl”(虚拟 url)解决了以下代码中的问题。

            Vb.Net

            Dim rptGen as WSTestProject.testproject = Nothing
            rptGen = New WSTestProject.testproject With {
                    .Url = "http://x-xxx-xx-xx-01:8080//TestProject/testproject?wsdl",
                    .Timeout = 1200000
                    }
            

            这里,WSTestProject 是 WebService 命名空间,testproject 是 web 方法。

            【讨论】:

              【解决方案8】:

              我正在使用一个 feign 客户端进行soap,我遇到了类似的问题,向 JAXB 请求和响应对象添加正确的命名空间解决了这个问题。

              【讨论】:

                【解决方案9】:

                问题在于我的环境是 php 中的 wsdl 缓存。客户端没有选择更新的 wsdl,它指的是旧的 wsdl。

                当您进行 Web 服务的开发和测试时,您可以执行以下任一选项,因为 wsdl 在 Web 服务的更新/实施过程中会发生变化

                • WSDL_CACHE_NONE 添加到soap 客户端创建

                  $myServices_client = new SoapClient($myServices_wsdl_URL, array('cache_wsdl' => WSDL_CACHE_NONE) );
                  
                • 设置初始化参数

                  ini_set("soap.wsdl_cache_enabled", 0);
                  

                【讨论】:

                  【解决方案10】:

                  添加“/”对您有用。 错误:找不到{http://zzz.com}servicename 的调度方法 不工作请求:xmlns:ser='http://zzz.com'> 工作请求:xmlns:ser='http://zzz.com/'>

                  【讨论】:

                    【解决方案11】:

                    我选择了一个旧的 Java 项目。我不确定它以前是如何工作的,但我看到了类似的错误,原因是服务器端的 SOAP HTTP 端点绑定错误。 无效:

                    Endpoint.create(HTTPBinding.HTTP_BINDING, servicePortType);
                    

                    作品:

                    Endpoint.create(SOAPBinding.SOAP11HTTP_BINDING, servicePortType);
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2023-04-07
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多