2

基本的なHTTP認証を使用してSSLでのみ実行されるWindows 7 x64上のIIS 7.5にWCFサービスを展開しようとしているエラーを把握するために、見つけることができるあらゆる場所(ここStackoverflowを含む)でグーグル検索を行っています。自己署名証明書を使用して HTTPS のポート 50443 にバインドされている IIS のサイトがあります。(80 と 443 でリッスンしている Tomcat を既に実行しているサーバー上の IIS にこれを展開する予定であるため、標準ポート 443 は使用できません。)

これは web.config です。

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="SSLBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="HelloWorldWcf.HelloWorldWcfService">
        <endpoint name="HelloWorldWcf.HelloWorldWcfService" 
                  address="https://mylaptop:50443/HelloWorld/Service1.svc" 
                  binding="basicHttpBinding" 
                  bindingConfiguration="SSLBinding" 
                  contract="HelloWorldWcf.IHelloWorldWcfService"/>
        <endpoint address="https://mylaptop:50443/HelloWorld/Service1.svc/mex" 
                  binding="mexHttpsBinding" 
                  contract="IMetadataExchange"/>
      </service>
    </services>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

サービス エンドポイント アドレスを参照し、基本認証資格情報を手動で入力すると、ブラウザーに次の例外エラー メッセージが表示されます。

指定された URI スキーム「https」は無効です。「http」が必要です。
パラメータ名: context.ListenUriBaseAddress

これは、同様のサービスに対して WCF クライアントを実行しようとしたときに発生したエラーと同じですが、「パラメーター名: via」で終わる点が異なります (コール スタックに表示されるメソッドのパラメーター名が「System.ServiceModel. Channels.TransportChannelFactory`1.ValidateScheme(URI via)」、実際には「via」です)。

私はサーバーとクライアントの構成ファイルを何度も微調整しましたが、追跡できなくなりましたが、上記の web.config ファイルは、これまでのところ私の最善の推測です-そして、ブラウザーからも機能せず、WCF クライアントからも機能しません。 .

IIS 7.5 でホストされている WCF サービスに、非標準の SSL ポートで HTTPS 経由の基本的な HTTP 認証を使用してアクセスするには、どうすればよいですか? ヘルプ!(& ありがとう!)

4

2 に答える 2

5

これをバインディングに追加してみてください

<security mode="Transport"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
    <message clientCredentialType="Certificate" algorithmSuite="Default" />
</security> 
于 2012-07-16T21:45:56.610 に答える
4

ああああ!さて、それを機能させるための残りの手順:

  1. web.config の <security> ノードを burning_LEGION のものに置き換えます。

  2. web.config から "mex" エンドポイントを削除します。(これにより、ブラウザで通常の「サービスを作成しました」というフレンドリーなWebページにアクセスできました。)

  3. クライアントC#コードでHelloWorldWcfServiceClient.ClientCredentials.UserName.UserNameに割り当てていた「DOMAIN\username」文字列のバックスラッシュをエスケープしました。(「うーん!」と言いましたか?私の顔は真っ赤です。)これにより、ステップ1と2の後に得たエラーが解消されました。

System.ServiceModel.Security.MessageSecurityException: "HTTP 要求は、クライアント認証スキーム 'Basic' では許可されていません。サーバーから受信した認証ヘッダーは 'Basic realm="mylaptop"' でした.---> System.Net.WebException: Theリモート サーバーがエラーを返しました: (401) 権限がありません。

ここからステップ 2 のアイデアを得たので、mex は HTTPS に不満を持っていると思いました。ステップ 3 のここから、ユーザー名が「ドメイン\ユーザー名」ではなく「ドメイン\ユーザー名」であることに気付きました。

アシストのためにburning_LEGIONに+1!

したがって、未回答の質問: (1) メッセージ セキュリティを使用しない (トランスポート セキュリティのみ) 構成にセキュリティ/メッセージ ノードが影響を与えるのはなぜですか? (2)通常の操作を妨げるだけの場合、mexエンドポイントのポイントは何ですか? (3) mode="TransportCredentialOnly" が HTTPS で機能しない場合、これを示すエラーが表示されないのはなぜですか?

于 2012-07-17T18:46:12.713 に答える