C# 在何处配置WCF服务(REST和SOAP)
我正在实现一个WCF Web服务,该服务负责使用多个绑定通过REST和SOAP发布数据。该服务将托管在IIS上 我以前写过一些WCF服务,并且知道一些如何通过使用web.config和在Global.asax文件中设置路由来配置这些服务的知识,但是我对如何进行最“干净”的配置或配置WCF服务的最佳实践感到困惑 以下是我到目前为止得出的结论: web.config可用于设置绑定、端点、安全性等-在IIS上托管服务时需要这样做,还是可以在IIS上完成配置 通过使用Global.asax,我们可以配置路由(以及许多其他东西)。但这是正确的地方吗C# 在何处配置WCF服务(REST和SOAP),c#,wcf,web-services,web-config,global-asax,C#,Wcf,Web Services,Web Config,Global Asax,我正在实现一个WCF Web服务,该服务负责使用多个绑定通过REST和SOAP发布数据。该服务将托管在IIS上 我以前写过一些WCF服务,并且知道一些如何通过使用web.config和在Global.asax文件中设置路由来配置这些服务的知识,但是我对如何进行最“干净”的配置或配置WCF服务的最佳实践感到困惑 以下是我到目前为止得出的结论: web.config可用于设置绑定、端点、安全性等-在IIS上托管服务时需要这样做,还是可以在IIS上完成配置 通过使用Global.asax,我们可以配置
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("Service", new WebServiceHostFactory(), typeof(Service)));
}
我花了一些时间在谷歌上搜索这个话题,似乎每个链接对如何完成任务都有自己的看法
因此,我想了解如何配置/实现WCF服务以支持以下内容:
- 通过REST/JSON和
- 通过SOAP/XML和发布元数据发布数据
- 提供不同的服务;及
非常感谢您的反馈。以下是我如何做到这一点的 Web.config:
<system.serviceModel>
<services>
<service name="Service">
<endpoint address="soap" contract="IService" binding="basicHttpBinding"/>
<endpoint address="rest" contract="IService" binding="webHttpBinding" behaviorConfiguration="restBehavior"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="restBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
在.NET4.5中,您完全可以省略.config文件中的任何配置。[ServiceContract]、[OperationContract]、[DataContract]是必不可少的。他们并没有在文档中明确指出这一点,但它是有效的:) “.NET Framework 4.5通过删除服务元素的要求,简化了WCF服务的配置。如果您没有添加服务节或在服务节中添加任何端点,并且您的服务没有以编程方式定义任何端点,则会自动将一组默认端点添加到您的服务中,每个服务基址和服务实现的每个契约对应一个
您将如何提出请求?我之所以这样问,是因为我刚刚尝试了您的建议,并且我只能通过/service/Update/1访问服务。对于SOAP客户端,URL是localhost:port/service.svc/SOAP。对于REST客户端,它是localhost:port/service.svc/REST/Update/1。我的答案是关于如何进行最低限度的配置两个端点。如果您需要确切的URL,则需要一些额外的配置。我需要能够配置位于两个不同URL上的服务:我部分使用了您的建议,因此我接受它作为答案。
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(UriTemplate="/Update/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
void Update(string id, Entity entity);
}