2009-03-04 12 views
3

私のコントロール外のクライアントが消費する.NET Webサービスを作成しました(私のサーバーはPHPで書かれたライブサーバー用のシミュレータです)。 Webサービスは必要に応じて機能しますが、クライアントは.asmx拡張機能やその拡張機能を呼び出しに追加する機能を持っていません。基本的にはhttp://localhost/soap/MyWebServiceを使用し、IISはhttp://localhost/soap/MyWebService.asmxを使用します。 IISが.asmx拡張子なしの要求に応答するようにする方法はありますか?.asmx拡張子を持たないIIS Webサービスを呼び出す

答えて

7

ワイルドカードマッピングを追加し、どのASP.NETを通るルートすべての要求を以下となります。

http://professionalaspnet.com/archive/2007/07/27/Configure-IIS-for-Wildcard-Extensions-in-ASP.NET.aspx

ます。また、着信要求http://localhost/soap/MyWebServicehttp://localhost/soap/MyWebService.asmxにマッピングできるようにするために、書き換えいくつかのURLを行う必要があります。

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だ)けど、それはあなたが始める必要があります。

+0

このソリューションは機能しますが、IIS 6以降を実行しているシステムでのみ動作します。 – jercra

+0

IIS 5.xにワイルドカードマッピングを追加することはできますが、手順は異なります。 – Brannon

+0

ええと、IIS 5.xにワイルドカードマッピングを追加することはできますが、動詞が許可されていないというエラーが表示されるWebサービスに関してはバグがあります。このバグは、ASP.netの掲示板にもよく載っています。 – jercra

4

また、それをディレクトリに単独で置くこともできますし、IISでそれをデフォルトのドキュメントとして設定することもできます。サーバー上で

:C:IISで/mywebsite.com/mywebservice/mywebservice.asmx

は、ウェブ上のデフォルトドキュメント

としてmywebservice.asmx設定:http://mywebsite.com/mywebservice

+0

それを試しても機能しませんでした。 – jercra

0

それは私には思われますPHPクライアントには何か非常に間違っていることがあります。彼らは何らかの形でサービスのURLをinterepretingすべきではありません。サーバーメタデータまたはクライアント構成で指定されているURLは、使用する必要があるURLです。

私はPHPを知らないのですが、なぜPHPにURLにいくつのドットがあるかを気にする理由を教えてもらえますか?私のサービスがhttp://localhost/foo/barか "http://localhost/foo/b.a.r.asmx?PHP=0"であるかどうかは、どのクライアントにとっても重要であることはわかりません。

+0

問題は、そこにいくつのドットがあるのか​​PHPが気にすることではありません。 PHPクライアントは私のコントロール下になく、アドレスはhttp:// localhost/foo/barにハードコードされており、IISはhttp://localhost/foo/bar.asmxを予期しています。 .asmxのないリクエストは依然として処理する必要があることを理解するためにIISが必要でした。 – jercra

+0

これは、世界で、Webサービスや他のリソースのクライアントがURLをハードコードするのは良いアイデアだろうという私の信念を確認し始めますか? URLが変更されます。彼らはいくつかの設定ストアからURLを取る必要があります。 –

0

PHPではwsdlのみを呼び出す必要があります。asxmやそのような愚かなことは必要ありません。

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()); 

+2

私は容赦しますが、PHPでもWSDLを呼び出すことはできません。 WSDLは、PHPが後で呼び出すサービスを記述するだけです。 WSDLには通常、実際のサービスのURLが含まれます。これは愚かな.asmxファイルになります。 –

関連する問題