Soap WSDL找不到的分派方法

Soap WSDL找不到的分派方法,soap,wsdl,Soap,Wsdl,对于使用WSDL的web服务调用,我得到了错误找不到的分派方法{http://ws.somecompany.com/services}ValidateUser,这到底是什么意思?这是否意味着它找不到ValidateUser?这通常意味着SOAP框架找不到应该通过此请求调用的操作。SOAP框架通常检查消息,以找到有关如何将消息路由到操作的指针。出现此错误的原因主要是配置问题(不同的名称空间、不同的编码(RPC与doc/lit)、WS-Addressing与普通SOAP的使用等)。我也遇到过类似的问

对于使用WSDL的web服务调用,我得到了错误
找不到的分派方法{http://ws.somecompany.com/services}ValidateUser
,这到底是什么意思?这是否意味着它找不到ValidateUser?

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

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

{http://ws.somecompany.com/services}ValidateUser
应该是

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

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

在我的例子中,我通过确保配置文件app.config或web.config(取决于您的客户端)具有正确的端点来解决问题。我的终点站地址错了。我改了,效果很好

我也为这个问题损失了一天,尽管根本原因不同


在我们的例子中,属性文件中混合了两个类似的端点URL。这两个服务都存在并正在运行,但WSDLs不匹配,因此我们得到的不是ConnectionException,而是SOAPFaultException:“找不到分派方法”。

我的50美分收到了相同的错误消息,但我的案例与上面的情况不同,因此希望它能帮助某些人


我有一个.wsdl文件,当ws另一端的同事重命名某个元素时,我不知道该文件已经过时。不幸的是,当我将.wsdl与它们的进行比较时,更改是不可见的,因为.wsdl文件具有.xsd导入,该导入实际上包含重命名的元素。找到更改后,我更新了.xsd文件和tada!错误消失了,它工作了。

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

SoapFault exception: [S:Client] Cannot find dispatch method for {}parameters in
几个小时后,在初始化SoapClient时添加\就解决了问题

发件人:

$client = new SoapClient($soapURL);
致:


我在.NET应用程序中遇到了同样的问题,在我的例子中,将url设置为“”(虚拟url)解决了下面代码中的问题

Vb.Net
这里,WSTestProject是WebService名称空间,testproject是web方法。

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

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

在开发web服务和测试时,您可以执行以下任一选项,因为wsdl在web服务的更新/实现过程中会发生更改

  • WSDL\u CACHE\u NONE
    添加到soap客户端创建中

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

    ini_set("soap.wsdl_cache_enabled", 0);
    

是的,这些都很糟糕。还有一个常见的错误是忽略了命名空间URI中http和https之间的差异。右键单击解决方案资源管理器中“web引用”文件夹中的web服务,选择“更新web服务”。等待VS完成该过程,您就完成了。在我的案例中,问题是
中引用的
中引用的
没有与
相同的命名空间。它还应该具有相同的名称,以避免包装输入参数。
$myServices_client = new SoapClient($myServices_wsdl_URL, array('cache_wsdl' => WSDL_CACHE_NONE) );
ini_set("soap.wsdl_cache_enabled", 0);