我正在尝试从 WCF 客户端调用 java web 服务。
Java 服务使用 WSE 3.0 安全性,因此我在服务的 Reference.cs 文件中使用自定义绑定如果我将服务合同更改为使用 protectionlevel.sign 并且一切正常。
现在的问题是我需要从 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 行为,在调用服务之前,设置 protectionlevel 以像这样登录代码。
Service.ServiceClient client = new Service.ServiceClient();
client.Endpoint.Contract.ProtectionLevel = System.Net.Security.ProtectionLevel.Sign;
var result = client.GetData();
这很好用。但我不能在 BizTalk 中执行此操作
任何人都知道为什么上面的代码有效,但自定义端点行为却没有?