2009-03-04 98 views

回答

7

添加通配符映射,这将借道ASP.NET的所有请求:

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

你也需要做一些URL重写,以允许传入的请求http://localhost/soap/MyWebService映射到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"); 

我没有测试它(和它的一个黑客),但它应该让你开始。

+0

尽管此解决方案可以工作,但它仅适用于运行IIS 6或更高版本的系统。 – jercra 2009-03-04 06:47:39

+0

可以将通配符映射添加到IIS 5.x,但步骤不同。 – Brannon 2009-03-04 08:53:41

+0

是的,你可以添加一个通配符映射到IIS 5.x,但是当涉及到Web服务时会出现一个错误,在这个错误中你会得到一个关于不被允许的动词的错误。这个错误在ASP.net留言板上非常明显。 – jercra 2009-03-05 17:19:38

4

你也可以把它放在一个目录中,然后在IIS中将它设置为默认文档。

在服务器:C:/mywebsite.com/mywebservice/mywebservice.asmx

在IIS中设置mywebservice.asmx作为默认文档

在网络上:http://mywebsite.com/mywebservice

0

在我看来, PHP客户端有一些问题。他们不应以任何方式对服务的URL进行表述。无论服务器元数据或客户端配置中指定的URL是他们应该使用的URL。

我不知道PHP,但任何人都可以告诉我为什么PHP对于网址中有多少点有意义?我看不出任何客户对我的服务是否在http://localhost/foo/bar或“http://localhost/foo/b.a.r.asmx?PHP=0”都有影响。

0

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

仅此而已。