合并REST-full WCF服务的冗余声明

时间:2011-05-09 13:50:52

标签: wcf rest .net-4.0 routetable wcf-rest-starter-kit

我正在使用.NET 4 WCF来公开以下REST-full webservice

  [OperationContract]
  [WebGet]
  void Test();

由于这是一个面向开发人员的程序,我想支持REST完全HTTP开发人员以及喜欢使用WSDL的开发人员。我的方法是声明服务两次以公开传统的WSDL和REST端点:

的Web.config

<serviceHostingEnvironment  aspNetCompatibilityEnabled="True" multipleSiteBindingsEnabled="true" >
  <serviceActivations >
    <add relativeAddress ="~/KeyService.svc" service="SecretDistroMVC3.Services.KeyService3"/>
  </serviceActivations>
</serviceHostingEnvironment>

Global.asax中

   void Application_Start(object sender, EventArgs e)
        { 
            //  The following enables the WCF REST endpoint
            //ASP.NET routing integration feature requires ASP.NET compatibility. Please see 
            // 'http://msdn.microsoft.com/en-us/library/ms731336.aspx
            RouteTable.Routes.Add(new ServiceRoute("KeyService3", new WebServiceHostFactory(), typeof(KeyService3)));

问题

由于我不希望在两个位置声明服务,如何在配置中配置两个端点,或在Application_Start中配置两个端点?

实施例

WCF's REST Help Endpoint

WCF's sample WSDL

1 个答案:

答案 0 :(得分:0)

在web.config文件中执行此操作可能比通过代码更容易。您可以按照下面显示的部分配置行配置您的服务。我通常将服务实现和WSDL&amp; REST接口命名空间,使配置更容易理解,但它是可选的。绑定和行为配置名称仅用于清楚地显示如何根据需要在各自的serviceModel元素中调整这些名称。

由于您不希望服务的WSDL版本受ASP.NET URL路由的影响,因此我将其基址设置为其端点中的... / Wsdl / KeyService3.svc。

   <service name="YourNamespace.Impl.KeyService3" behaviorConfiguration="yourServiceBehaviorSettings">

        <!-- Service Endpoints -->
        <endpoint address="Wsdl"
                  binding="wsHttpBinding"
                  bindingConfiguration="Http"
                  contract="YourNamespace.Wsdl.IKeyService3" />

        <endpoint address="mex"
                    binding="mexHttpBinding"
                    contract="IMetadataExchange"/>

        <endpoint address="Services"
              behaviorConfiguration="webBehavior"
              binding="webHttpBinding"
              name="webHttp"
              contract="YourNamespace.IKeyService3"
              listenUriMode="Explicit" />
    </service>