gpt4 book ai didi

wcf - ServiceRoutes 在 WCF 中不起作用

转载 作者:行者123 更新时间:2023-12-04 19:53:51 24 4
gpt4 key购买 nike

这是我的。当我尝试通过 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)));
}

最佳答案

首先,命名空间与服务地址无关,它用于 wsdl 上的目标命名空间并组成 soap 操作,也可用于在端点之间进行消息路由。

aspNetCompatibilityEnabled 将使请求通过 aspnet 管道,然后您可以使用 aspnet url 重写来解决您的问题。

但是您使用的是 dotnet 4.5,那么只需将它放在 Global.asax.cs 上,它比 url 路由模块更容易。

    void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}

private void RegisterRoutes(RouteCollection routes)
{
routes.Add(new ServiceRoute("Cars",
new ServiceHostFactory(), typeof(Sandbox.WCF.API.Cars)));
}

Eliminate the .svc in the URL of a WCF 4 service using Routes?与你正在尝试做的事情有关。这里有关于这个问题的讨论ServiceRoute + WebServiceHostFactory kills WSDL generation? How to create extensionless WCF service with ?wsdl

关于wcf - ServiceRoutes 在 WCF 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19362988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com