.asmx拡張子なしでIIS Webサービスを呼び出す
-
03-07-2019 - |
質問
私は、.NET Webサービスを作成しました。このWebサービスは、制御外のクライアントによって使用されます(私のサーバーは、PHPで作成されたライブサーバーのシミュレータです)。 Webサービスは必要に応じて機能しますが、クライアントには、呼び出しに.asmx拡張子またはそれに関する拡張子を追加する機能がありません。基本的には http:// localhost / soap / MyWebService を使用しますが、IISは http://localhost/soap/MyWebService.asmx 。 IISが.asmx拡張子なしでリクエストに応答する方法はありますか?
解決
ASP.NETを介してすべての要求をルーティングするワイルドカードマッピングを追加します。
着信リクエスト http:// localhost / soap / MyWebService
が http:// localhost / soap / MyWebServiceにマップできるように、URLの書き換えも行う必要があります。 .asmx
。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
基本的に、 Application_BeginRequest
メソッドに次のようなものを追加できます。
string path = Request.Path;
if (path.Contains("/soap/") && !path.EndsWith(".asmx"))
Context.RewritePath(path + ".asmx");
まだテストしていません(HACKです)が、開始する必要があります。
他のヒント
それ自体をディレクトリに配置し、IISでデフォルトのドキュメントとして設定することもできます。
サーバー上:C:/mywebsite.com/mywebservice/mywebservice.asmx
IISでmywebservice.asmxをデフォルトのドキュメントとして設定します
PHPクライアントに何か非常に悪い点があるように思えます。サービスのURLを何らかの方法で解釈すべきではありません。サーバーメタデータまたはクライアント構成で指定されているURLはすべて、使用するURLです。
PHPについては知りませんが、PHPがURLにあるドットの数を気にするのが理にかなっている理由を教えてください。私のサービスが http:// localhost / foo / bar または" http:// localhost / foo / barasmx?PHP = 0 "。
phpではwsdlのみを呼び出す必要があり、asxmや.netが行うそのような愚かなことは必要ありません。
1つの簡単な例
$wsdl = "http://domain/wsdlfile.wsdl"; //url to wsdl
$client = new SoapClient($wsdl,array('trace' => 1,'encoding' => 'UTF-8','exceptions' => 0));
$Return = $client->callfunction();
echo htmlspecialchars($client->__getLastResponse());
それだけです。