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 でこれを行うことはできません
上記のコードが機能する理由を知っている人はいますが、カスタム エンドポイントの動作は機能しませんか?