【发布时间】:2011-09-19 23:16:26
【问题描述】:
对于使用 WSDL 的 Web 服务调用,我收到错误 Cannot find dispatch method for {http://ws.somecompany.com/services}ValidateUser,这到底是什么意思?是不是说找不到ValidateUser?
【问题讨论】:
对于使用 WSDL 的 Web 服务调用,我收到错误 Cannot find dispatch method for {http://ws.somecompany.com/services}ValidateUser,这到底是什么意思?是不是说找不到ValidateUser?
【问题讨论】:
这通常意味着 SOAP 框架找不到应通过此请求调用的操作。 SOAP 框架通常检查消息以查找有关如何将消息路由到操作的指针。此错误的原因主要是配置问题(不同的命名空间、不同的编码(RPC 与 doc/lit)、WS-Addressing 与普通 SOAP 的使用等)
【讨论】:
<message> 的<part> 中引用的<element> 在<operation> 的<input> 中引用没有相同的命名空间作为<operation>。它还应该具有相同的名称以避免输入参数的换行。
我遇到了类似的问题,并且在谷歌上搜索了 1 天。但这是一个简单的错误,而不是:
{http://ws.somecompany.com/services}ValidateUser
应该是
{http://ws.somecompany.com/services/}ValidateUser
我没有清楚地检查我的 WSDL。
【讨论】:
在我的情况下,我通过确保我的配置文件 app.config 或 web.config 取决于您的客户端具有正确的端点来解决。我的端点地址错误。我改变了它,它工作得很好。
【讨论】:
我也为这个问题浪费了一天的时间,尽管根本原因不同。
在我们的例子中,两个相似的端点 url 在属性文件中混在一起了。两个服务都存在并正在运行,但 WSDL 不匹配,因此我们得到的不是 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);
收件人:
$client = new \SoapClient($soapURL);
【讨论】:
我在 .NET 应用程序中遇到了同样的问题,在我的情况下,将 url 设置为“http://x-xxx-xx-xx-01:8080//TestProject/testproject?wsdl”(虚拟 url)解决了以下代码中的问题。
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 方法。
【讨论】:
我正在使用一个 feign 客户端进行soap,我遇到了类似的问题,向 JAXB 请求和响应对象添加正确的命名空间解决了这个问题。
【讨论】:
问题在于我的环境是 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);
【讨论】:
添加“/”对您有用。
错误:找不到{http://zzz.com}servicename 的调度方法
不工作请求:xmlns:ser='http://zzz.com'>
工作请求:xmlns:ser='http://zzz.com/'>
【讨论】:
我选择了一个旧的 Java 项目。我不确定它以前是如何工作的,但我看到了类似的错误,原因是服务器端的 SOAP HTTP 端点绑定错误。 无效:
Endpoint.create(HTTPBinding.HTTP_BINDING, servicePortType);
作品:
Endpoint.create(SOAPBinding.SOAP11HTTP_BINDING, servicePortType);
【讨论】: