0

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

  [OperationContract]
  [WebGet]
  void Test();

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

网页配置

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

全球.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)));

问题

由于我不喜欢在两个位置声明服务,我如何在 config 中配置两个端点,或者在 config 中配置两个端点Application_Start

例子

WCF 的 REST 帮助端点

WCF 的示例 WSDL

4

1 回答 1

0

在 web.config 文件中执行此操作可能比通过代码更容易。您可以按照如下所示的部分配置来配置您的服务。我通常将服务实现与 WSDL 和 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>
于 2011-05-09T14:41:02.437 回答