.NET Webサービスクライアント-クライアントは 'text / plain'の応答コンテンツタイプを検出しましたが、 'text / xml'を予期していました
-
10-07-2019 - |
質問
SOAP WSDLへのWeb参照を持つASP.NET Webページがあります。このWSDLに関連付けられているメソッド(別のサーバーに存在するメソッド)を呼び出すと、すべてが正常に機能します。ただし、WSDLが指すエンドポイントアドレスを動的に変更できるようにしたいと思います。その理由は、異なるグループに対して同じWebサービスのセットをホストしており、Webサービスを使用しているユーザーを追跡したいからです。そのため、各セットには独自のURLがあります。
" Url"を変更しようとしましたSOAPクライアントオブジェクトのプロパティを別のエンドポイントに追加しますが、その場合、メソッドは次のエラーを返します。
クライアントは「text / plain」の応答コンテンツタイプを検出しましたが、「text / xml」が必要です
Urlプロパティがプロキシクラスを混乱させて、現在REST Webサービスを使用していると考えていると思いますか?
コードの一部を次に示します。
mySoapNamespace.mySoapClient soapClient = new mySoapNamespace.mySoapClient();
//next I try to change the endpoint URL of the WSDL, misguided? ...
soapClient.Url = "http://a_different_url/my_soap_server.wsdl";
string result = soapClient.myTestMethod();
Response.Write(result);
そこでエラーが発生します。 SOAP呼び出しのエンドポイントを動的に変更する修正または別の方法を知っている人はいますか?
解決
わかりました!私が間違っていたことを理解しました。 Web参照のUrlプロパティを変更するとき、 code エンドポイント(WSDLのwsdl:portセクションのsoap:addressであるもの)を指定する必要があります。 WSDL自体を指定していました:
soapClient.Url =" http://a_different_url/my_soap_server.wsdl &quot ;;
...実際には、その背後にあるPHPスクリプトを参照する必要がありました。
soapClient.Url =" http://a_different_url/my_soap_server.php &quot ;;
web.configファイルを見ると、プロキシクラスがUrlに設定する内容(WSDLをインポートするとき)を明確に確認できます。 URLをリストするappSettingsセクションがあります。そして、リモートサーバー上のWSDLではなくコードファイルを指していることに気付きました。