web-dev-qa-db-ja.com

WSDLのディスパッチメソッドが見つかりません

WSDLを使用したWebサービス呼び出しの場合、エラーCannot find dispatch method for {http://ws.somecompany.com/services}ValidateUserが発生します。正確にはどういう意味ですか? ValidateUserが見つからないということですか?

16
Johnny Klassy

これは通常、SOAPフレームワークがこの要求を介して呼び出す必要のある操作を見つけられなかったことを意味します。ASOAPフレームワークは通常、メッセージを検査して、メッセージを操作にルーティングします。このエラーの理由は、主に構成の問題(さまざまな名前空間、さまざまなエンコーディング(RPCとdoc/lit)、WS-Addressingの使用とプレーンSOAP etcなど)です。 。)

21
vanto

私にも同様の問題があり、1日間グーグルで苦労していました。しかし、それは単純な間違いでした。

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

そのはず

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

WSDLを明確にチェックしていませんでした。

17
Kulai

私の場合、クライアントに応じて構成ファイルapp.configまたはweb.configに正しいエンドポイントがあることを確認することで解決しました。エンドポイントのアドレスが間違っていました。私はそれを変更し、それはうまくいきました。

2
Ziggler

私の50セントで、同じエラーメッセージが表示されましたが、私のケースは上記のすべてとはまだ異なっていたので、誰かの助けになるかもしれません。

私は.wsdlファイルを持っていましたが、wsの反対側にいる同僚がいくつかの要素の名前を変更すると、知らないうちに古くなります。残念ながら、.wsdlファイルに.xsdインポートがあり、実際には名前が変更された要素を含んでいたため、.wsdlをtheirsと比較したときに変更は表示されませんでした。変更を見つけた後、.xsdファイルとtadaを更新しました。エラーはなくなり、機能しました。

1
Padvinder

また、根本的な原因は異なりますが、この問題で1日を失いました。

私たちのケースでは、2つの同様のエンドポイントURLがプロパティファイルで混同されていました。両方のサービスが存在し、実行されていましたが、WSDLが一致しなかったため、ConnectionExceptionの代わりに、次のSOAPFaultException:「ディスパッチメソッドが見つかりません」を取得していました。

1
fahran

私は石鹸に偽のクライアントを使用していて、同様の問題がありました。JAXBリクエストとレスポンスオブジェクトに正しい名前空間を追加すると、問題が解決します。

0
Bibhuti

.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メソッドです。

0
Kiran Modini

私の環境での問題は、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);
    
0
Shantha Kumara

私の場合、すべてのパラメータを指定しても、次の例外がスローされていました

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

数時間頭を叩いた後、SoapClientの初期化中に\を追加するだけで問題が解決しました。

から:

$client = new SoapClient($soapURL);

に:

$client = new \SoapClient($soapURL);
0
Zolbayar