【问题标题】:Allow web service to serve both request http and https?允许 Web 服务同时提供请求 http 和 https?
【发布时间】:2016-06-03 18:03:42
【问题描述】:
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="Complete_Html5.CompleteService.CompleteServiceAspNetAjaxBehavior" name="Complete_Html5.CompleteService.Complete">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Complete" contract="Complete_Html5.CompleteService.Complete" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
      <service name="Complete_Html5.Service1" behaviorConfiguration="Complete_Html5.Service1ServiceAspNetAjaxBehavior">
        <endpoint address="" binding="basicHttpBinding" contract="Complete_Html5.Service1" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>

    <behaviors>
      <endpointBehaviors>
        <behavior name="Complete_Html5.Service1AspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
        <behavior name="Complete_Html5.CompleteService.CompleteServiceAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>      
      <serviceBehaviors>
        <behavior name="Complete_Html5.CompleteService.CompleteServiceAspNetAjaxBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>        
        <behavior name="Complete_Html5.Service1ServiceAspNetAjaxBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>        
      </serviceBehaviors>      
    </behaviors>

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_Complete" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="10485760" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
        <binding name="BasicHttpBinding_Complete1" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
        <binding name="BasicHttpBinding_Service1" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="10485760" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true" messageEncoding="Text">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
        <binding name="BasicHttpBinding_Service11" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://www.examplete.com:83/CompleteService/Complete.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Complete" contract="Complete_Html5.CompleteService.Complete" name="BasicHttpBinding_Complete" />
      <endpoint address="http://www.examplete.com:83/CompleteService/Complete.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Complete1" contract="PMCService.Complete" name="BasicHttpBinding_Complete1" />
      <endpoint address="http://www.examplete.com:83/Service1.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Service1" contract="ReportService.Service1" name="BasicHttpBinding_Service1" />
      <endpoint address="http://www.examplete.com:83/Service1.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Service11" contract="ReportService.Service1" name="BasicHttpBinding_Service11" />
    </client>
  </system.serviceModel>

以上是web.config 中的service 设置,我必须进行哪些更改才能在访问website 时同时使用httphttps??

我们已将 ssl 证书添加到服务器,并且未选中网站 ssl 证书设置中的 required ssl

它工作正常http 但是当点击时网站是https 它抛出错误:

提供的URI方案https无效;预期http。范围 名称:通过。

如何解决这个问题,以便同时点击 httphttps

这是我们调用Web服务方法时的特殊情况!

已尝试在 serviceMetadata 元素中添加httpsGetEnabled="true",但仍然无法正常工作..!

【问题讨论】:

  • @您好,请为上述问题提出一些建议..! :-(
  • 我正在寻找上周的这个问题的解决方案,我在一些论坛上发布了这个问题,但他们提供的链接对我也没有帮助。即使我在这个论坛上询问这个问题也没有。很多时候没有解决方案来做到这一点。但是,正如我看到开发人员这样做的地方的数量,并且正如他们根据 commnet 所说的那样工作得很好,但在我的情况下这没有帮助,我不知道,我是否犯了错误来解决或任何其他原因不作品。请问有人可以建议做什么吗??

标签: asp.net web-services web-config wcf-binding


【解决方案1】:

试试这个

你已经拥有了

<serviceHostingEnvironment multipleSiteBindingsEnabled="true"...

因此您将需要单独的 http 和 https 绑定,因此:

<bindings>
  <basicHttpBinding>
    <binding name="NoSecurity">
      <security mode="None" />
    </binding>
    <binding name="SSL">
      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </basicHttBinding>
</bindings>

然后将它们应用到几个端点..

<endpoint 
  address="Basic" 
  binding="basicHttpBinding"
  bindingConfiguration="NoSecurity"
  contract="Complete_Html5.CompleteService.Complete" />
<endpoint 
  address="SSL" 
  binding="basicHttpBinding"
  bindingConfiguration="SSL"
  contract="Complete_Html5.CompleteService.Complete" />

然后你会得到你的 2 个端点

http://path/to/your.service.svc/basic

https://path/to/your.service.svc/ssl

您可能还想将此添加到您的服务行为中

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />

这样您也可以通过 https 获取元数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多