2016-05-02 34 views
1

私はWCFサービスを使用しています.WCFサービスでは、HTTP経由で安全でないコマンドが実行される可能性がありますが、支払いが完了するとすぐにTLS 1.2に切り替える必要があります。HTTPとTLSを使用するWCF

もう1つのバインディングで第2サービスへの参照を追加し、名前空間を追加的に変更することを除いて、これを行う方法はありません。

私は同じサービスを使用でき、バインディングを切り替えることはできますか?

私は新しいバージョンに特徴がある場合には、.NET 4.6.1使用...

THX!

答えて

2

ホストに複数のバインディングとエンドポイントとクライアントも定義できます。疑似コードでこのようなものは、あなた自身の設定を記入する必要があります。

<netTcpbinding> 
    <binding name="notsecure"> 
    <security mode="None" /> 
    </binding> 
    <binding name="secure"> 
    <security mode="Transport" /> <!-- desired security settings --> 
    </binding> 
</netTcpBinding> 
    <services> 
     <service name="yyy"> 
     <endpoint binding="netTcpbinding" bindingConfiguration="notsecure" name="insecureEnd" 
      contract="IContract" /> 
     <endpoint binding="netTcpBinding" bindingConfiguration="secure" 
      name="secureEnd" contract="IContract" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="xxx" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 

次に、クライアントを同じ複数のバインディングと複数のエンドポイントで設定します。

そして、コード内の名前で正しいエンドポイントを選択し

Client secure = new Client("secure"); 
secure.Call(); 

Client notsecure = new Client("notsecure"); 

あなたは彼らが特定の証明書で認証されたときに特定の機能のみを呼び出すことができるようにPrincipalPermission属性を使用することができます。 MSDNから

https://msdn.microsoft.com/en-us/library/ms731200(v=vs.110).aspx

[PrincipalPermission(SecurityAction.Demand, Name = "CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")] 
public double Multiply(double a, double b) 
{ 
    return a * b; 
} 
+0

はそれだけで特定のコマンドは、TLSを使用できるようにすることも可能ですか? Marker属性/インタフェースでマークするのと同じですか?例えば。 Command1、Command2はHTTP経由で、Command3はTLS経由でのみ使用できますか? – NickD

関連する問題