我有一个 WCF REST 服务,它公开了 GreetService 类中的一个方法:
[ServiceContract]
public class GreetService
{
[WebGet(UriTemplate = "greet/{name}")]
public String GreetName(string name)
{
return "Hello " + name;
}
}
另外,我在 Global.asax 中注册了一条路线:
RouteTable.Routes.Add(new ServiceRoute("GreetService", new WebServiceHostFactory(), typeof(GreetService)));
现在,当我直接从 Visual Studio 运行它时,我可以利用 UriTemplate 并使用对 http://localhost:5432/GreetService/greet/JohnDoe的 GET 调用来调用此方法
但是,通过为其创建 Greet.svc 文件将其部署到 IIS7 后,我观察到以下行为:
- 我可以调用http://localhost:5432/Greet.svc它说已经创建了一个服务
- 我可以将 wcftestclient 指向http://localhost:5432/Greet.svc?wsdl以生成可以直接调用 GreetName() 的测试客户端
- 但是,我不能调用http://localhost:5432/Greet.svc/GreetService/greet/JohnDoe也不能调用 http://localhost:5432 /Greet.svc/greet/JohnDoe虽然我希望能够因为我指定在将其托管在 IIS7 中之前,相应 web.config 文件中的空相对端点地址。
任何想法为什么 WebGetAttribute 在 IIS 中不起作用?还是我做错了什么?
编辑:这是我的 web.config 文件的 ServiceModel 部分,它位于 IIS 使用的目录中:
<system.serviceModel>
<!-- <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> -->
<standardEndpoints>
<webHttpEndpoint>
<!--
Configure the WCF REST service base address via the global.asax.cs file and the default endpoint
via the attributes on the <standardEndpoint> element below
-->
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
编辑 2:为了完整起见,这里是我的完整 web.config 文件:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule"
type="System.Web.Routing.UrlRoutingModule,
System.Web, Version=4.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
<handlers>
<add name="UrlRoutingHandler"
preCondition="integratedMode"
verb="*" path="UrlRouting.axd"
type="System.Web.HttpForbiddenHandler,
System.Web, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
</system.webServer>
<system.serviceModel>
<!--<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>-->
<standardEndpoints>
<webHttpEndpoint>
<!--
Configure the WCF REST service base address via the global.asax.cs file and the default endpoint
via the attributes on the <standardEndpoint> element below
-->
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>