为 http 和 https 端点配置带有路由 (global.asax) 的 WCF 4

Posted

技术标签:

【中文标题】为 http 和 https 端点配置带有路由 (global.asax) 的 WCF 4【英文标题】:Configuring WCF 4 with routing (global.asax) for both http & https endpoints 【发布时间】:2011-03-04 15:48:51 【问题描述】:

我仍然是 wcf 的新手,一般来说对 .net 不太了解。我有一个 WCF 4 Web 服务,它使用 global.asax 路由方法和使用标准端点方法的非常简化的 web.config。此 wcf 服务目前在 iis 7.5 上作为具有默认网站的应用程序运行。如果可能的话,我需要它同时支持 http 和 https 接口。如果那太复杂,那么只有https。在保持当前方法的情况下,如何最好地处理?

global.asax.cs 和 web.config 文件的内容非常基本:

public class Global : HttpApplication

    void Application_Start(object sender, EventArgs e)
    
        RegisterRoutes();
    

    private void RegisterRoutes()
    
        // Edit the base address of Service1 by replacing the "ippay" string below
        RouteTable.Routes.Add(new ServiceRoute("myservice", new WebServiceHostFactory(),   
typeof(myservice)));     
    



<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
<webHttpEndpoint>
     <standardEndpoint name="" helpEnabled="true"    contentTypeMapper="myservice.Util.RawMapper,myservice">
        </standardEndpoint>
  </webHttpEndpoint>
</standardEndpoints>

【问题讨论】:

【参考方案1】:

我找到了答案:你只需要把这个 sn-p 放在你的 web.config 中的 serviceModel 标签中:

<bindings>
      <webHttpBinding>
        <binding>
          <security mode="Transport" />
        </binding>
      </webHttpBinding>
    </bindings>

感谢这个帖子:http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/1dd991a1-e32f-4035-a406-994729858b40

我的完整 web.config 是这样的:

<?xml version="1.0"?> <configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />   </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>   </system.webServer>

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <bindings>
      <webHttpBinding>
        <binding>
          <security mode="Transport" />
        </binding>
      </webHttpBinding>
    </bindings>
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true">
          <security mode="Transport" >

          </security>
        </standardEndpoint>
      </webHttpEndpoint>
    </standardEndpoints>   </system.serviceModel> </configuration>

【讨论】:

我认为您不需要标准端点中的第二个“”部分。不过应该不会造成任何问题。【参考方案2】:

如果您不想同时使用 HTTP 和 HTTPS,则上述方法有效。就我而言,我想要两者,因为某些服务需要 SSL(身份验证),而其他服务则不需要,因为它们提供的信息不敏感。如果请求不是来自 https 方案,则身份验证服务实现自己进行验证并拒绝回答。

如果您想在同一端点上同时设置 HTTP 和 HTTPS,则下面的配置有效。

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding>
          <security mode="Transport" />
        </binding>
        <binding name="UnsecureBinding"></binding>
      </webHttpBinding>
    </bindings>
    <protocolMapping>
      <add scheme="http" binding="webHttpBinding" bindingConfiguration="UnsecureBinding" />
    </protocolMapping>
    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" />
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

【讨论】:

以上是关于为 http 和 https 端点配置带有路由 (global.asax) 的 WCF 4的主要内容,如果未能解决你的问题,请参考以下文章

三Express 路由

springCloud(14):使用Zuul构建微服务网关-路由端点与路由配置详解

带有服务结构的 SOAP - Https 和 Http 绑定

带有 netTcpBinding 的 WCF 路由服务

路由和端点的区别?

带有 CustomBinding 的 WCF 服务配置 HTTPS