2

WCF クライアントから Java Web サービスを呼び出そうとしています。

Java サービスは WSE 3.0 セキュリティを使用するため、カスタム バインディングを使用し、サービスの Reference.cs ファイルで保護レベルを使用するようにサービス コントラクトを変更すると、すべて正常に動作します。

問題は、BizTalk からこのサービスを呼び出す必要があることです。しかし、署名する保護レベルを設定する方法がなく、サービスへの呼び出しが失敗します。

ClientCredentials の動作から派生するカスタム動作を作成し、ApplyClientBehavior メソッドをオーバーライドして、次のような保護レベルを設定しようとしています。

public override void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.ClientRuntime behavior)
{
        base.ApplyClientBehavior(serviceEndpoint, behavior);
        serviceEndpoint.Contract.ProtectionLevel = ProtectionLevel.Sign;

}

しかし、これは機能せず、proctionlevel がデフォルトに設定されている場合と同じエラーで失敗します。デバッグでコントラクト エンドポイントを調べると、保護レベルは署名に設定されていますが、効果はありません。

次に、reference.cs ファイルのサービス コントラクトから protectionlevel.sign を削除し、代わりに clientcredentials の動作を使用しようとしました。サービスを呼び出す前に、このようなコードにサインインするように保護レベルを設定しました。

Service.ServiceClient client = new Service.ServiceClient();
client.Endpoint.Contract.ProtectionLevel = System.Net.Security.ProtectionLevel.Sign;

var result = client.GetData();

そして、これはうまくいきます。しかし、BizTalk でこれを行うことはできません

上記のコードが機能する理由を知っている人はいますが、カスタム エンドポイントの動作は機能しませんか?

4

0 に答える 0