我编写了一个.NET Web服务,供我的控制之外的客户端使用(我的服务器是用PHP编写的实时服务器的模拟器)。 Web服务按预期工作,但客户端无法在其调用中添加.asmx扩展名或任何扩展名。它们基本上使用http://localhost/soap/MyWebService,而IIS期望http://localhost/soap/MyWebService.asmx。有没有办法让IIS响应没有.asmx扩展名的请求?
答案 0 :(得分:9)
添加通配符映射,它将通过ASP.NET路由所有请求:
您还需要进行一些网址重写,以允许传入的请求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设置为默认文档
答案 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());
就是这样。