连接到WSE 3.0 Web服务从客户端WCF(Connecting to a WSE 3.0 We

2019-07-31 16:19发布

我在连接到第三方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文章),但我似乎无法渡过了难关。 有人可以帮我吗?

Answer 1:

我在下面的结合配置的类似案件的成功:

<bindings>
   <customBinding>
      <binding name="FNCEWS40MTOMBinding">
         <security enableUnsecuredResponse="true" authenticationMode="UserNameOverTransport"
                   allowInsecureTransport="true" messageProtectionOrder="SignBeforeEncrypt">
            <secureConversationBootstrap />
         </security>
         <mtomMessageEncoding messageVersion="Soap12WSAddressingAugust2004"
                              maxBufferSize="2147483647" />
         <httpTransport maxReceivedMessageSize="2147483647" />
     </binding>
  </customBinding>
</bindings>

希望它为你工作了。



Answer 2:

该错误消息指的传输层安全性,这通常意味着HTTPS。

您还没有表现出你的配置文件。 但我猜你已经配置的安全是运输(或它被要求作为另一种选择的consiquence),并使用的是http来代替https地址。



文章来源: Connecting to a WSE 3.0 Web Service From a WCF Client