这就是我所拥有的。当我尝试通过它访问我的服务时,http://localhost:55129/Cars.svc
它工作正常。
当我尝试http://localhost:55129/Cars
它没有。我认为路线应该允许这样做,但我显然错过了一些东西。
这是我的服务课程
[ServiceContract(Name = "Cars", Namespace = "http://localhost:53329", SessionMode = SessionMode.NotAllowed)]
public interface ICars
{
[OperationContract(Name="Get"), WebGet(UriTemplate = "/cars",
BodyStyle= WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
string Get();
[OperationContract(Name = "GetById"), WebGet(UriTemplate = "/cars/?id={id}",
BodyStyle= WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
Car Get(int id);
}
这是我的 web.config
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
<serviceActivations>
<add relativeAddress="Cars.svc" service="Sandbox.WCF.API.Cars"/>
</serviceActivations>
</serviceHostingEnvironment>
<bindings>
<!-- SOAP Binding -->
<basicHttpBinding>
<binding name ="soapBinding">
<security mode="None"></security>
</binding>
</basicHttpBinding>
<!-- Enable RESTful Endpoints-->
<webHttpBinding>
<binding name="webBinding"></binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<!-- allow XML REST -->
<behavior name="poxBehavior">
<webHttp defaultOutgoingResponseFormat="Xml"/>
</behavior>
<!--<behavior name="jsonBehavior"><enableWebScript/></behavior>-->
<!-- allow JSON REST -->
<behavior name="jsonBehavior">
<webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="defaultBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="Sandbox.WCF.API.Cars" behaviorConfiguration="defaultBehavior">
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="soapBinding" contract="Sandbox.WCF.API.Interfaces.ICars" />
<endpoint address="json" binding="webHttpBinding" bindingConfiguration="webBinding" behaviorConfiguration="jsonBehavior" contract="Sandbox.WCF.API.Interfaces.ICars" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
更新 - Per Luiz 的评论
可能有一些我仍然没有做对的事情,因为它还没有工作:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
<serviceActivations>
<add relativeAddress="Cars.svc" service="OurCompany.API.Service.Cars"/>
</serviceActivations>
</serviceHostingEnvironment>
在我的服务项目的 global.asax
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes();
}
private void RegisterRoutes()
{
RouteTable.Routes.Add(new ServiceRoute("Cars", new WebServiceHostFactory(), typeof(Cars)));
}