【发布时间】:2010-11-17 19:35:22
【问题描述】:
我无法从 WCF 客户端连接到第 3 方 WSE 3.0 Web 服务。我已经按照这篇知识库文章中的说明实现了自定义绑定类:
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();
安装了 WSE 3.0 的 2.0 应用程序可以正常工作。这是来自我的 WCF 客户端的代码的 sn-p:
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 文章),但我似乎无法克服困难。有人可以帮帮我吗?
【问题讨论】:
-
只是为了确定,您的第三方是否知道 WSE 已过时?
-
你能解决这个问题吗?有人有想法吗?我目前被困在同一件事上。
标签: wcf web-services wse