私は、自分の制御外のクライアントによって使用される.NET Webサービスを作成しました(私のサーバーは、PHPで作成されたライブサーバーのシミュレーターです)。Webサービスは希望どおりに機能しますが、クライアントには、呼び出しに.asmx拡張子、またはそれに関する拡張子を追加する機能がありません。基本的にhttp:// localhost / soap / MyWebServiceを使用しますが、IISはhttp://localhost/soap/MyWebService.asmxを想定しています。IISが.asmx拡張子なしで要求に応答するようにする方法はありますか?
4 に答える
ASP.NET を介してすべての要求をルーティングするワイルドカード マッピングを追加します。
http://localhost/soap/MyWebService
また、着信リクエストを にマップできるように、URL の書き換えも必要になりますhttp://localhost/soap/MyWebService.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 です) が、それはあなたを始めるのに役立つはずです。
PHPでは、wsdlのみを呼び出す必要があります。asxmや.netが行うような愚かなことは必要ありません。
簡単な例
$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());
それで全部です。
PHP クライアントに何か大きな問題があるように思えます。いかなる方法でも、サービスの URL を解釈してはなりません。サーバー メタデータまたはクライアント構成で指定された URL は、それらが使用する必要がある URL です。
私は PHP を知りませんが、PHP が URL に含まれるドットの数を気にすることがなぜ理にかなっているのか誰か教えてもらえますか? 私のサービスがhttp://localhost/foo/barまたは " http://localhost/foo/barasmx?PHP=0 " のどちらにあるかがクライアントにとって重要であることはわかりません。