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

有帮助吗?

解决方案

添加通配符映射,它将通过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");

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

其他提示

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

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

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

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

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

我不知道PHP,但是有人能告诉我为什么PHP有理由关心URL中有多少个点?我无法看到任何客户都应该关注我的服务是否在 http:// localhost / foo / bar 或“ http:// localhost / foo / barasmx?PHP = 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());

就是这样。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top