28

我正在尝试在 IIS 中的单独网站上托管 WCF Web 服务,并将 443 处的 https 作为唯一绑定。

当我在同时使用两种绑定 (http(80) / https(443)) 的网站中使用以下配置时,以下配置效果很好。如果我删除 http 绑定,它会开始抛出以下错误。

找不到与绑定 BasicHttpBinding 的终结点的方案 http 匹配的基地址。注册的基地址方案是 [https]。

如何使其在仅使用 https 绑定的 IIS 网站中工作?

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="defaultBasicHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="Certificate" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost/ERPService/retailPayment.svc"
                binding="basicHttpBinding" bindingConfiguration="defaultBasicHttpBinding"
                contract="RetailPaymentService.RetailPayment.SVRetailPaymentService" name="EnterpriseRetailPayment" />
    </client>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="MyEndPointBehavior">
          <!--<SchemaValidator enabled="true"/>-->
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="SettlementSalesCollection.SaleItemService" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint behaviorConfiguration="MyEndPointBehavior" binding="basicHttpBinding"
                  name="SettlementSalesCollection"
                  contract="SettlementSalesCollection.CITransactionSettlementListenerService" />
        <endpoint name="mexEndpoint" contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
      </service>
    </services>
    <extensions>
      <behaviorExtensions>
        <add name="SchemaValidator"
             type="SettlementSalesCollection.SchemaValidation.SchemaValidationBehavior+CustomBehaviorSection, SettlementSalesCollectionService, Version=1.0.0.0, Culture=neutral" />
      </behaviorExtensions>
    </extensions>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
4

9 回答 9

24

您的配置应该与此类似。您可能需要<transport clientCredentialType="None" proxyCredentialType="None" />根据您的身份验证需要进行更改。下面的配置不需要任何身份验证。

<bindings>
    <basicHttpBinding>
        <binding name="basicHttpBindingConfiguration">
            <security mode="Transport">
                <transport clientCredentialType="None" proxyCredentialType="None" />
            </security>
        </binding>       
    </basicHttpBinding>
</bindings>

<services>
    <service name="XXX">
        <endpoint
            name="AAA"
            address=""
            binding="basicHttpBinding"
            bindingConfiguration="basicHttpBindingConfiguration"
            contract="YourContract" />
    </service>
<services>

这将允许 WCF 服务basicHttpBinding使用 HTTPS。

于 2013-11-12T04:06:25.270 回答
12

就我而言,这解决了问题

  1. 通过单击项目名称上的 F4 转到项目属性
  2. 设置 SSLEnabled = true

项目属性图像

于 2019-09-17T18:08:56.890 回答
11

我的问题是由于 IIS 中缺少绑定引起的,在左侧树视图“连接”中,在站点下,右键单击您的站点 > 编辑绑定 > 添加 > https

选择“IIS Express 开发证书”并将端口设置为 443 然后我在 webconfig 中添加了另一个绑定:

<endpoint address="wsHttps" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" name="Your.bindingname" contract="Your.contract" />

还添加到 serviceBehaviours: <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />

最终它起作用了,我在stackoverflow上检查的这个错误的解决方案都不适用于我的特定场景,所以包括这里以防它帮助其他人

于 2017-02-21T10:44:53.400 回答
10

如果您仅https在 IIS 中配置为站点绑定,则可以获得此信息。

您需要添加http(80)以及https(443)- 至少我做到了:-)

于 2017-05-05T06:05:08.240 回答
4

我根据@Szymon 的回答尝试了绑定,但它对我不起作用。我尝试了 .net 4.5 中新增的basicHttpsBinding,它解决了这个问题。这是适合我的完整配置。

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpsBinding>
        <binding name="basicHttpsBindingForYourService">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None"/>
          </security>
        </binding>
      </basicHttpsBinding>
    </bindings>
    <services>
      <service name="YourServiceName">
        <endpoint address="" binding="basicHttpsBinding" bindingName="basicHttpsBindingForYourService" contract="YourContract" />
      </service>
    </services>   
</system.serviceModel>

仅供参考:我的应用程序的目标框架是 4.5.1。我为部署此 wcf 服务而创建的 IIS 网站仅启用了 https 绑定。

于 2016-04-26T19:21:59.283 回答
1

在我的情况下,协议映射下的绑定名称与端点上的绑定名称不匹配。它们在下面的示例中匹配。

<endpoint address="" binding="basicHttpsBinding" contract="serviceName" />

    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
于 2018-02-13T10:49:29.577 回答
1

我的问题也是由于 IIS 中缺少 https 绑定引起的:Selected default website > 在最右边的窗格中选择 Bindings > add > https

选择“IIS Express 开发证书”并将端口设置为 443

于 2018-03-15T09:05:47.110 回答
0

打开 IIS 并右键单击默认应用程序池并添加绑定以使应用程序使用 HTTPS 协议。

类型:https

IP地址:全部未分配

端口号:443

SSL 证书:WMSVC

然后

单击并重新启动 IIS

完毕

于 2019-02-05T12:22:09.817 回答
0

我收到了同样的错误修复它:

customBinding --> binding --> httpTransport 改为 httpTransport

binding="mexHttpBinding" 更改为 binding="mexHttp s Binding"

对于 binding="wsHttpBinding"添加bindingConfiguration="_WsHttpBinding" 在 system.serviceModel --> bindings 下添加以下部分:

 <wsHttpBinding>
      <binding name="_WsHttpBinding">
        <security mode="Transport">
            <transport clientCredentialType="None"/>
        </security>            
      </binding>
 </wsHttpBinding>
于 2021-10-11T09:20:46.150 回答