2

トランスポート セキュリティ モデルを使用して WCF サービスを保護しようとしています。サービスを AppHarbor に正常にデプロイしました。しかし、サービス ページにアクセスしようとすると、次の例外が発生します。

[InvalidOperationException: BasicHttpBinding をバインディングするエンドポイントのスキーム https に一致するベース アドレスが見つかりませんでした。登録されているベース アドレス スキームは [http] です。] ...

そこでピギーバックSSLを使用するだけで、証明書をアップロードしていません。ビルドをダウンロードして、自分のマシンにデプロイしました。それは正常に動作します。

web.config の system.serviceModel セクションは次のとおりです。

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="TransportSecurity">
                <security mode="Transport">
                    <transport clientCredentialType="None"/>
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <services>
        <service behaviorConfiguration="AuthService.AuthServiceBehavior"  name="AuthService.AuthService">
            <host>
                <baseAddresses>
                    <add baseAddress="https://auth.apphb.com/AuthService.svc" />
                </baseAddresses>
            </host>
            <endpoint address="" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" contract="AuthService.IAuthService" />
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="AuthService.AuthServiceBehavior">
                <serviceMetadata httpsGetEnabled="true"/>        
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

私はすでにこのHosting a WCF Web API app on AppHarbor を試しましたか?

誰かが私が間違っていることを説明してもらえますか?

4

2 に答える 2

4

この問題は、LB(AppHarborの例の1つ)を介してwcfWebサービスと通信するときに頻繁に発生します。

あなたはそのような種類のコミュニケーションについていくつかのことを知っているべきです。

1)クライアントアプリケーションとLB間の通信が保護されます(https使用中)。したがって、クライアント側でセキュリティバインディングを活用する必要があります。

 <basicHttpBinding>
     <binding name="BasicHttpBinding_IAuthService">
         <security mode="Transport">
             <transport clientCredentialType="None" />
         </security>
     </binding> 
 </basicHttpBinding>

2)LBとWeb-frontの間の通信は使用するhttpため、サーバーバインディングはbasicHttpBinding追加の構成なしで行う必要があります。

<endpoint binding="basicHttpBinding" contract="AuthService.IAuthService" />

私たちが持っているすべてのものを要約する

クライアント

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IAuthService">
                    <security mode="Transport">
                        <transport clientCredentialType="None" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://auth.apphb.com/AuthService.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAuthService"
                contract="AuthService.IAuthService" name="BasicHttpBinding_IAuthService" />
        </client>
    </system.serviceModel>
</configuration>

サーバ

<system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <protocolMapping>
      <add scheme="http" binding="basicHttpBinding" />
    </protocolMapping>
    <bindings>
      <basicHttpBinding/>
    </bindings>
    <services>
      <service behaviorConfiguration="AuthService.AuthServiceBehavior" name="AuthService.AuthService">
        <endpoint binding="basicHttpBinding" contract="AuthService.IAuthService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="AuthService.AuthServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
于 2012-08-28T13:28:23.770 に答える
1

あなたのアプローチはすぐにはうまくいきません。これは、SSL がロード バランサーで終了し、アプリ サーバーが http トラフィックを参照するためです。AppHarbor ロード バランサーの詳細については、こちらを参照してください。

このモジュールで WCFをだますことができるかもしれません。

この議論にはいくつかのヒントもあります: http://support.appharbor.com/discussions/problems/829-transportwithmessagecredential-https-ssl

于 2012-08-27T21:48:33.333 に答える