调用不带.asmx扩展名的IIS Web服务

时间:2009-03-04 03:33:31

标签: .net web-services iis asmx

我编写了一个.NET Web服务,供我的控制之外的客户端使用(我的服务器是用PHP编写的实时服务器的模拟器)。 Web服务按预期工作,但客户端无法在其调用中添加.asmx扩展名或任何扩展名。它们基本上使用http://localhost/soap/MyWebService,而IIS期望http://localhost/soap/MyWebService.asmx。有没有办法让IIS响应没有.asmx扩展名的请求?

4 个答案:

答案 0 :(得分:9)

添加通配符映射,它将通过ASP.NET路由所有请求:

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

您还需要进行一些网址重写,以允许传入的请求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");

我没有测试过它(它是一个HACK),但它应该让你开始。

答案 1 :(得分:4)

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

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

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

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

答案 2 :(得分:0)

在我看来,PHP客户端存在一些问题。他们不应以任何方式解释服务的URL。服务器元数据或客户端配置中指定的URL是他们应该使用的URL。

我不知道PHP,但是有人能告诉我为什么PHP有理由关心URL中有多少个点?我无法确定任何客户对我的服务是http://localhost/foo/bar还是“http://localhost/foo/b.a.r.asmx?PHP=0”都很重要。

答案 3 :(得分: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());

就是这样。