首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >支持HTTPS和HTTPS Web.Config服务

支持HTTPS和HTTPS Web.Config服务
EN

Stack Overflow用户
提问于 2015-06-29 07:03:59
回答 3查看 8.4K关注 0票数 5

当我尝试同时支持https和https时,我的WCF服务遇到了一个配置问题。理想情况下,我想要的是在我的开发机器上运行http,然后发布到azure上运行https。

我遵循这些帖子来尝试并运行配置:http://jayakrishnagudla.blogspot.com/2009/12/configuring-wcf-services-to-work-with.html

How to configure a single WCF Service to have multiple HTTP and HTTPS endpoints?

我的Web.Config如下:

代码语言:javascript
运行
复制
<system.serviceModel>
    <services>
      <service name="Backend.Services.UserService.UserService" behaviorConfiguration="">

        <endpoint address=""
           binding="webHttpBinding"
           contract="Backend.Services.UserService.IUserService"
           bindingConfiguration="HttpsBinding"
           behaviorConfiguration="Web">

        </endpoint>

        <endpoint address=""
                  binding="webHttpBinding"
                  contract="Backend.Services.UserService.IUserService"
                  bindingConfiguration="HttpBinding"
                  behaviorConfiguration="Web"
                  >

        </endpoint>
      </service>
    </services>
      <bindings>
        <webHttpBinding>
          <binding name ="HttpBinding">
            <security mode="None">
              <transport clientCredentialType="None"/>
            </security>
          </binding>

          <binding name="HttpsBinding">
            <security mode="Transport"/>
          </binding>
        </webHttpBinding>

    </bindings>
    <behaviors>

      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>

      <endpointBehaviors>
        <behavior name="Web">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <protocolMapping>
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

据我所知,根据上面的链接,这个配置应该是正确的。然而,当我通过http在本地构建和运行这个服务时,我得到了以下错误:

代码语言:javascript
运行
复制
Could not find a base address that matches scheme https for the endpoint with binding WebHttpBinding. Registered base address schemes are [http].

我不太确定问题出在哪里,并假设是配置错误。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2017-08-06 05:01:44

我已经尝试这么做好几天了(实际上是几年前,但几天前才重启),上面的帖子给我指明了使用protocolMapping的正确方向,但你需要在protocolMapping部分指定bindingConfiguration,让它选择or:

代码语言:javascript
运行
复制
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  <protocolMapping>
    <add scheme="http"  binding="basicHttpBinding" bindingConfiguration="ServiceBinding"/>
    <add scheme="https" binding="basicHttpBinding" bindingConfiguration="ServiceBindingSSL"/>      
  </protocolMapping>

保留端点的bindingConfiguration属性-它将根据协议自动设置。然后在绑定部分设置第二个绑定配置:

代码语言:javascript
运行
复制
        <basicHttpBinding>
            <binding name="ServiceBinding"  ...>
                <security mode="None">
                </security>
            </binding>
            <binding name="ServiceBindingSSL" ... >
                <security mode="Transport">
                </security>
            </binding>
        </basicHttpBinding>

这项技术对我很有效。希望能对你有所帮助!

票数 4
EN

Stack Overflow用户

发布于 2015-06-29 07:33:53

您看过协议映射wcf配置部分了吗?

代码语言:javascript
运行
复制
<protocolMapping>
    <add scheme="http" binding="wsHttpBinding"/>
    <add scheme="https" binding="wsHttpBinding"/>      
</protocolMapping>

编辑:我不确定您为什么要在webHttpBinding类型下配置"https“绑定。

代码语言:javascript
运行
复制
<webHttpBinding>
    <binding name ="HttpBinding">
        <security mode="None">
            <transport clientCredentialType="None"/>
        </security>
    </binding>
</webHttpBinding>

<wsHttpBinding>
    <binding name="wsHttpEndpointBinding">
        <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="None" />
            <message clientCredentialType="UserName" />
        </security>
    </binding>
</wsHttpBinding>
票数 1
EN

Stack Overflow用户

发布于 2020-04-20 23:53:38

根据Rick Moss的回答,我终于让它在HTTP和HTTPS上工作了。除了我没有将bindingConfiguration留在端点之外,因为它导致了一个无端点侦听错误:

代码语言:javascript
运行
复制
<configuration>
  ...
  <system.serviceModel>
    <services>
      <service name="WcfService1.Service1">
        <endpoint address="" name="ep1" binding="webHttpBinding" bindingConfiguration="ServiceBinding" contract="WcfService1.IService1" behaviorConfiguration="WebBehavior" />
        <endpoint address="" name="ep1" binding="webHttpBinding" bindingConfiguration="ServiceBindingSSL" contract="WcfService1.IService1" behaviorConfiguration="WebBehavior" />
      </service>
    </services>

    <bindings>
      <webHttpBinding>
        <binding name="ServiceBinding" ...>
          <security mode="None">
          </security>
        </binding>
        <binding name="ServiceBindingSSL" ...>
          <security mode="Transport">
            <transport clientCredentialType="None" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>

    <behaviors>
      <endpointBehaviors>
        <behavior name="WebBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      ...
    </behaviors>

    <protocolMapping>
        <add scheme="http"  binding="basicHttpBinding" bindingConfiguration="ServiceBinding"/>
        <add scheme="https" binding="basicHttpBinding" bindingConfiguration="ServiceBindingSSL"/>      
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

  </system.serviceModel>
  ...
</configuration>

IIS :这似乎只适用于中的匿名身份验证。在IIS中同一网站下的不同web服务中启用Windows身份验证会导致:

代码语言:javascript
运行
复制
Could not find a base address that matches scheme https for the endpoint with binding WebHttpBinding. Registered base address schemes are [http]. 

我讨厌Web.config文件。它们与IIS的耦合过于紧密

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31105678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档