3

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

4

4 回答 4

9

添加通配符映射,它将通过 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),但它应该让你开始。

于 2009-03-04T03:41:02.780 回答
4

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

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

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

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

于 2009-03-04T03:43:55.067 回答
0

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

我不了解 PHP,但谁能告诉我为什么 PHP 关心 URL 中有多少个点有意义?我看不出我的服务是在http://localhost/foo/bar还是“ http://localhost/foo/barasmx?PHP=0 ”对任何客户来说都很重要。

于 2009-03-05T14:36:31.107 回答
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());

就这样。

于 2009-04-06T20:39:56.670 回答