1

これは、web.config での私のサービス構成です。

<binding name="statefulSessionWithUsernameOverTransport">
  <security authenticationMode="SecureConversation"
    requireSecurityContextCancellation="False" allowInsecureTransport="True">
    <secureConversationBootstrap authenticationMode="UserNameOverTransport"/>
  </security>
  <binaryMessageEncoding />
  <httpTransport />
</binding>

<service name="com.example.FooService"
  behaviorConfiguration="usernamePasswordAuthBehavior">
  <endpoint contract="com.example.FooService.IFooService"
    address="custom" binding="customBinding"
    bindingConfiguration="statefulSessionWithUsernameOverTransport" />
</service>

私は allowInsecureTransport=True を設定しています。本番環境では、サービスが SSL ターミネーティング ロード バランサーの背後で実行されるためです。.Net 4.0 クライアントからサービスを呼び出すと問題なく動作しますが、VS2010 でサービス参照を更新しようとすると、常にエラーが発生します。

System.ServiceModel.Channels.TransportSecurityBindingElement エラー: セキュリティ ポリシーのエクスポートに失敗しました。Binding には TransportSecurityBindingElement が含まれていますが、ITransportTokenAssertionProvider を実装するトランスポート セキュリティ バインディング要素は含まれていません。このようなポリシー エクスポートのポリシー エクスポートはサポートされていません。*

私はそれが私に何を伝えようとしているのかを理解しています - それは基本的に、ネットワーク上を移動する資格情報を危険にさらすことを避けるために必要なバインディングでトランスポート セキュリティを無効にしたということです。しかし、それがallowInsecureTransportの要点です。プロキシ ジェネレータが単にこの属性を認識していない可能性はありますか?

アップデート:

wsdl ジェネレーターが実際に属性を処理できないようです。開発のために、メッセージ レベル セキュリティと自己署名証明書に戻る必要がありました。Message Security を使用すると、本格的な IIS に移行する代わりに、Cassini for Development に固執できるという利点がありました。

<wsHttpBinding>
    <binding name="wshttpDevelopmentBinding">
      <security mode="Message">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
</wsHttpBinding>
4

3 に答える 3

2

この同じ問題に遭遇しました。ITransportTokenAssertionProvider インターフェイスを実装していないため、問題は http トランスポートにあるようですが、https は実装しています。この 2 つの方法を回避することができました。カスタム バインディングを切り替えて、インターフェイスを実装する https トランスポートを使用するか、config の security 要素に enableUnsecuredResponse="true" を追加するか、HttpTransportBindingElement から派生するが実装するカスタム バインディングを記述します。必要なインターフェース。

于 2010-10-13T19:25:48.090 に答える
1

私はこれについて数回読んだことがあります(たとえば、ここまたはここ)が、試したことはありません。サービスとクライアントを手動で構成すると機能するはずですが、メタデータのエクスポートが機能しないため、WSDL エクスポートのバグのようです。2番目のリンクはいくつかの回避策を提案していますが、それは醜いものです。

私の提案は、allowInsecureTransport を false に設定し、HTTPS とテスト証明書を使用して開発し、アプリケーションをデプロイするときにこの構成を切り替えることです (インストール パッケージの一部にすることができます)。

于 2010-09-19T08:24:34.683 に答える
0

同様の問題に遭遇しました。クライアント マシンに .NET Framework 3.5 のホット フィックスをインストールしたところ、その後は機能しました。

于 2012-12-02T10:40:52.033 に答える