我在连接到第三方WSE 3.0 Web服务从WCF客户端的难度。 我已经实现了自定义绑定类作为本知识库文章中指出:
http://msdn.microsoft.com/en-us/library/ms734745.aspx
这个问题似乎与Web服务中使用的安全断言这样做 - UsernameOverTransport。
当我尝试调用一个方法,我得到下面的异常:
System.InvalidOperationException:该“WseHttpBinding”“[命名空间]”为“MyWebServiceSoap”结合“[命名空间]”合同被配置与需要传输层的完整性和机密性的验证模式。 然而,运输不能提供完整性和机密性..
它期待一个用户名,密码和CN号。 在由供应商提供给我们的示例代码,这些凭证被捆绑在一个Microsoft.Web.Services3.Security.Tokens.UsernameToken。 这里是由供应商提供的例子:
MyWebServiceWse proxy = new MyWebServiceWse();
UsernameToken token = new UsernameToken("Username", "password", PasswordOption.SendPlainText);
token.Id = "<supplied CN Number>";
proxy.SetClientCredential(token);
proxy.SetPolicy(new Policy(new UsernameOverTransportAssertion(), new RequireActionHeaderAssertion()));
MyObject mo = proxy.MyMethod();
这工作正常,从2.0的应用程序W¯¯WSE 3.0安装/。 这是从我的WCF客户端的代码片段:
EndpointAddress address = new EndpointAddress(new Uri("<web service uri here>"));
WseHttpBinding binding = new WseHttpBinding(); // This is the custom binding I created per the MS KB article
binding.SecurityAssertion = WseSecurityAssertion.UsernameOverTransport;
binding.EstablishSecurityContext = false;
// Not sure about the value of either of these next two
binding.RequireDerivedKeys = true;
binding.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;
MembershipServiceSoapClient proxy = new MembershipServiceSoapClient(binding, address);
// This is where I believe the problem lies – I can’t seem to properly setup the security credentials the web service is expecting
proxy.ClientCredentials.UserName.UserName = "username";
proxy.ClientCredentials.UserName.Password = "pwd";
// How do I supply the CN number?
MyObject mo = proxy.MyMethod(); // this throws the exception
我已经冲刷网页寻找一个回答这个问题。 一些消息来源让我接近(如MS KB文章),但我似乎无法渡过了难关。 有人可以帮我吗?