web-dev-qa-db-ja.com

WCF例外:エンドポイントのスキームhttpに一致するベースアドレスが見つかりませんでした

IISで唯一のバインディングとして443のhttpsを使用して、別のWebサイトでWCF Webサービスをホストしようとしています。

次の構成は、両方のバインディング(http(80)/ https(443))を使用するWebサイトで使用するとうまく機能します。 httpバインディングを削除すると、次のエラーがスローされ始めます。

BasicHttpBindingをバインドしたエンドポイントのスキームhttpに一致するベースアドレスが見つかりませんでした。登録済みのベースアドレススキームは[https]です。

IIS httpsバインディングのみを備えたWebサイトで動作させるにはどうすればよいですか?

  <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>
19
KManohar

あなたの設定はそれに似ているはずです。変更が必要な場合があります<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>

これにより、basicHttpBindingを持つWCFサービスがHTTPSを使用できるようになります。

19
Szymon

私の問題は、IISでバインドが見つからないことが原因で発生しました。サイトを右クリックし、[バインドを編集]> [追加]> [https]

[IIS Express Development Certificate]を選択し、ポートを443に設定してから、webconfigに別のバインディングを追加しました。

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

ServiceBehavioursにも追加されました:<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />

そして最終的には機能しましたが、このエラーのstackoverflowでチェックしたソリューションはどれも私の特定のシナリオに適用できませんでしたので、他の人を助ける場合にはここに含めてください

8
JsonW

httpsをIIS内のサイトバインドとしてのみ構成する場合、これを取得できます。

http(80)https(443)を追加する必要があります-少なくとも私は追加しました:-)

7
Simon_Weaver

@Szymonの回答に従ってバインディングを試しましたが、うまくいきませんでした。 basicHttpsBindingを試しました。これは.net 4.5の新機能で、問題を解決しました。ここに私のために働く完全な構成があります。

<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です。 IISこのwcfサービスをデプロイするために作成したWebサイトでは、httpsバインディングのみが有効になっています。

4
A P

私の問題は、IISでhttpsバインディングが見つからないことによっても発生しました。選択されたデフォルトのWebサイト>右端のペインで[バインディング]> [追加]> https

「IIS Express Development Certificate」を選択し、ポートを443に設定します

1
Mandi

私の場合、プロトコルマッピングの下のバインディング名はエンドポイントのバインディング名と一致しませんでした。以下の例では一致しています。

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

そして

    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
0
housten

私の場合、これは問題を修正しました

  1. プロジェクト名のF4をクリックして、プロジェクトのプロパティに移動します
  2. SSLEnabled = trueに設定

プロジェクトプロパティイメージ

0
Ketaki More

Open IISそして、デフォルトのアプリケーションプールを右クリックし、バインディングを追加して、HTTPSプロトコルでアプリケーションを動作させます。

タイプ:https

IPアドレス:すべて未割り当て

ポート番号:443

SSL証明書:WMSVC

それから

IISをクリックして再起動します

完了

0