web-dev-qa-db-ja.com

https with WCFエラー:「スキームhttpsに一致するベースアドレスが見つかりませんでした」

https://mywebsite/MyApp/Myservice.svc にアクセスすると、次のエラーが表示されます。

(http://を使用するとリンクが機能します)

"コンパイル中の例外のため、サービス '/MyApp/MyService.svc'をアクティブにできません。例外メッセージ:バインドBasicHttpBindingを持つエンドポイントのスキームhttpsに一致するベースアドレスが見つかりませんでした。スキームは[http] .. "

EDIT:したがって、address=""からaddress="https:// ..."その後、代わりにこのエラーが表示されます。

"エラー:プロトコル 'https'はサポートされていません..... ' https://.../Annotation.svc 'のChannelDispatcher (s) '"注釈"'はIChannelListenerを開けません。 "

これが私のWeb.Configは次のようになります。

<services>
      <service behaviorConfiguration="AnnotationWCF.AnnotationBehavior"
              name="AnnotationWCF.Annotation">
              <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Annotation"
                      contract="AnnotationWCF.Annotation" />
              <endpoint address="" 
                  binding="basicHttpBinding" bindingConfiguration="SecureTransport"
                  contract="AnnotationWCF.Annotation" />
              <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
<bindings>
<basicHttpBinding>
    <binding name="BasicHttpBinding_Annotation" maxBufferSize="2147483647"
            maxReceivedMessageSize="2147483647">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647"
            maxNameTableCharCount="2147483647" />
    </binding>
    <binding name="SecureTransport" maxBufferSize="2147483647"
            maxReceivedMessageSize="2147483647">
        <security mode="Transport">
        <transport clientCredentialType="None"/>
        </security>
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647"
            maxNameTableCharCount="2147483647" />
    </binding>
</basicHttpBinding>
41
Mike Blandford

私の問題は、ロードバランサーを使用してSSLを処理し、それがhttpを介して実際のサーバーに送信し、その後文句を言うことであることが判明しました。

修正の説明はこちら: http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/

編集:マイクロソフトのサポートに相談した後、わずかに異なる問題を修正しました。

私のsilverlightアプリは、ロードバランサーへのhttps経由のコードにエンドポイントアドレスがありました。次に、ロードバランサーはエンドポイントアドレスをhttpに変更し、目的の実際のサーバーを指すようにしました。したがって、各サーバーのWeb構成で、httpsではなくhttpであるエンドポイントのlistenUriを追加しました

<endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... />
20
Mike Blandford

これとまったく同じ問題がありました。私の解決策を除いて、バインディング値に「s」を追加することでした。

Old: binding = "mexHttpBinding"

新規: binding = "mexHttpsBinding"

web.config snippet:

<services>
    <service behaviorConfiguration="ServiceBehavior" name="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
        <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" 
            contract="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
    </service>
28
MacGyver

サーバーでSSLが有効になっていることを確認してください!

その証明書がないローカルボックスでHTTPS構成ファイルを使用しようとすると、このエラーが発生しました。いくつかのバインディングをHTTPSからHTTPに変換して、ローカルテストを実行しようとしていました。ローカルテスト用に自己署名証明書をインストールするよりも、これを行う方が簡単だと思いました。

SSLが有効になっていないローカルでIIS実際に使用するつもりはなかったにもかかわらず).

HTTPSの構成に何かがありました。 IIS7で自己署名証明書を作成すると、HTTPが機能するようになりました:-)

8
Simon_Weaver

次の設定と同様の方法でサービスを設定しようとしていると思います。ここに詳細があります: 異なるバインディング値を使用して2つのエンドポイントを持つサービスを指定 。また、開発以外では、同じサービスにHTTPエンドポイントとHTTPSエンドポイントの両方を設定することはおそらく良い考えではありません。それはちょっとHTTPSの目的を打ち負かします。お役に立てれば!

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="shortTimeout"
    </endpoint>
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="Secure"
     </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        timeout="00:00:00:01" 
     />
     <basicHttpBinding 
        name="Secure">
        <Security mode="Transport" />
     </basicHttpBinding>
</bindings>
3
Sixto Saez

私の場合、バインディングで「Transport」ではなく「TransportCredentialOnly」にセキュリティモードを設定しています。変更して問題を解決しました

<bindings>
  <webHttpBinding>
    <binding name="webHttpSecure">
      <security mode="Transport">
        <transport clientCredentialType="Windows" ></transport>
      </security>
      </binding>
  </webHttpBinding>
</bindings>
1

私はwebHttpBindingを使用しており、エラーの原因となったバインディング構成で「トランスポート」のセキュリティモードを指示するのを忘れていました。

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

これを構成に追加すると、問題が修正されました。

0
atconway

ベースアドレスとエンドポイントアドレスを確認します(サンプルコードでは確認できません)。列または他のタイプミスを逃した可能性が高いです。 https://ではなくhttps //

0