両方で同じバインディングを使用していますか? MEXエンドポイント用とwshttpのための1 - もしそうなら、2つの別々のバインディングしてみてください: - :
<wsHttpBinding><binding name="wsHttpBindingMessageUname">
<security mode="Message">
<message clientCredentialType="UserName" negotiateServiceCredential="true"
establishSecurityContext="false" />
</security></binding></wsHttpBinding>
とMEXエンドポイント(保障なし)のために:サービスのためにそう
をのようなもの
それはだ、この設定で
<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" />
:
<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>
サービスのエンドポイントは次のようになりますmexのセキュリティを適用しないので、サービス参照を更新しようとしているときにそのメッセージを受け取るべきではありません。いずれか、または異なる資格情報、つまりお客様のマシン上のクライアント証明書を使用する別の安全なバインディングを作成します。
次のMSDN投稿には、このサンプルがあります。このblogには、安全なmexエンドポイントに関する詳細があります。
私は思いますそれは私のサービスがすべてサービスレベルを持っているので動作するはずです。serviceCredentials:cert&uname/passを指定するbehaviourConfiguration。その後、サービスエンドポイントでは、behaviourConfigurationを空のエンドポイントの振る舞いに設定する必要があります(名前は必要ありませんが、壊れていないので修正しません)、mexエンドポイントにはbehaviourConfigurationはありません。 – Tanner
これはうまくいくはずですが、ユーザー名は問題ではありません。トランスポート層やメッセージ層のエンコーディング、またはバインディングが使用されているとは思いません。サービスが証明書付きのhttpsが原因です – Neil