在哪里配置WCF服务(REST和SOAP)

时间:2012-03-13 10:24:59

标签: 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服务以支持以下内容:

对于记录我知道如何使用SOAP / REST发布数据 - 这不是问题。我只是想为服务做出最干净/最小化的配置。

非常感谢任何反馈。

2 个答案:

答案 0 :(得分:6)

以下是我如何做到这一点。

的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>  

合同如下:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(UriTemplate="/Update/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    void Update(string id, Entity entity);
}

答案 1 :(得分:0)

使用.net 4.5,您可以省略.config文件中的任何配置。 [ServiceContract],[OperationContract],[DataContract]将是必不可少的。他们没有在文档中明确说明,但它有效:)

“。NET Framework 4.5通过删除服务元素的要求,可以更轻松地配置WCF服务。如果您不添加服务部分或添加任何端点服务部分,您的服务不会以编程方式定义任何端点,然后会自动将一组默认端点添加到您的服务中,每个服务基地址和服务实现的每个合同都会自动添加一个端点。 - 来自

https://msdn.microsoft.com/en-us/library/ee358768%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396