我正在尝试从WCF客户端调用java webservice。
Java服务使用WSE 3.0安全性,因此我使用自定义绑定并在服务的Reference.cs文件中如果我将服务合同更改为使用protectionlevel.sign并且一切正常。
现在问题是我需要从BizTalk调用此服务。但是我无法将protectionlevel设置为签名,并且对服务的调用失败。
我正在尝试编写一个源自ClientCredentials行为的自定义行为,并覆盖ApplyClientBehavior方法以设置保护级别,如下所示:
public override void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.ClientRuntime behavior)
{
base.ApplyClientBehavior(serviceEndpoint, behavior);
serviceEndpoint.Contract.ProtectionLevel = ProtectionLevel.Sign;
}
但是这不起作用它失败的错误与proctionlevel设置为默认值相同。如果我在调试中检查合同端点,则保护级别设置为sign但它没有效果。
然后我尝试从reference.cs文件中的服务契约中删除protectionlevel.sign并使用clientcredentials行为,而不是在调用service之前,将protectionlevel设置为登录这样的代码。
Service.ServiceClient client = new Service.ServiceClient();
client.Endpoint.Contract.ProtectionLevel = System.Net.Security.ProtectionLevel.Sign;
var result = client.GetData();
这很好用。但我不能在BizTalk中做到这一点
任何人都知道为什么上面的代码有效,但自定义端点行为不起作用?