1

WCFサービスへのアクセスを保護するために、証明書とともにUsernamePasswordValidatorを使用しています。

ただし、使用しているカスタム承認ポリシーは、エンドポイントの動作ではなくSERVICEの動作であるため、MEXエンドポイントを含むすべてのエンドポイントに適用されます。毎回サービスの動作をコメントアウトすることなく、Visual Studioを使用してサービス参照を取得できるようにしたいのですが、mexとwshttpエンドポイントの両方が保護されているため、「サービス参照の追加」を実行するとエラーが発生します。 ..」

これを回避する方法はありますか?

4

2 に答える 2

1

両方で同じバインディングを使用していますか?その場合は、2つの別々のバインディングを試してください。1つはmexエンドポイント用で、もう1つはwshttp用です。

したがって、サービスの場合-次のようなものです。

<wsHttpBinding><binding name="wsHttpBindingMessageUname">
<security mode="Message">
    <message clientCredentialType="UserName" negotiateServiceCredential="true"
      establishSecurityContext="false" />
</security></binding></wsHttpBinding>

およびmexエンドポイント(セキュリティなし)の場合:

<customBinding><binding name="customMex">
<textMessageEncoding>
    <readerQuotas maxDepth="2147483647"
          maxStringContentLength="2147483647"
          maxArrayLength="2147483647"
          maxBytesPerRead="2147483647"
          maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport transferMode="Buffered"
               maxReceivedMessageSize="2147483647"
               maxBufferSize="2147483647"/></binding></customBinding>

サービスエンドポイントは次のようになります。

<endpoint address="" behaviorConfiguration="Server.Services.DefaultEndpointBehavior"  binding="wsHttpBinding" bindingConfiguration="wsHttpBindingMessageUname" name="DefaultHttp" contract="Server.Services.IMyService" listenUriMode="Explicit" />
<endpoint address="mex" binding="customBinding" contract="IMetadataExchange" name="" bindingConfiguration="customMex" listenUriMode="Explicit" />

この設定では、mexのセキュリティが適用されていないため、サービス参照を更新しようとしたときにそのメッセージが表示されないようにする必要があります。それか、異なる資格情報、つまりマシン上のクライアント証明書を使用する別の安全なバインディングを作成します。

次のMSDN投稿には、このサンプルがあります。安全なmexエンドポイントに関する詳細については、このブログを参照してください。

于 2009-06-25T09:46:52.187 に答える
0

質問から、彼はService Behavioursを使用していることにも気付いたと思います。したがって、サービス全体がUserNamePassword Validatorを使用するため、バインディング構成に違いはありません。

ここで2つのことが思い浮かびます。

明示的なmexバインディングを削除し、アンダーサービスの動作を追加します

<serviceMetadata httpsGetEnabled="true" />

またはmexバインディングを維持し、有効にします

<serviceMetadata httpGetEnabled="true" />

CustomUserNameValidatorはメタデータを要求するときに実行されないため、httpsgetenabledがオンになっておらず、httpにmexバインディングがある場合は、少なくともhttpGetenabledが必要です。

于 2009-06-25T10:08:20.833 に答える