Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF客户端到WSE 3.0服务_Wcf_Wse3.0 - Fatal编程技术网

WCF客户端到WSE 3.0服务

WCF客户端到WSE 3.0服务,wcf,wse3.0,Wcf,Wse3.0,我尝试创建WCF客户端到WSE3.0服务。我已经将WSE3.0客户端应用于同一服务。以下是它的配置: <microsoft.web.services3> <security> <timeToleranceInSeconds value="10000"/> <x509 allowTestRoot="true" verifyTrust="true" storeLocation="CurrentUser"/> <binary

我尝试创建WCF客户端到WSE3.0服务。我已经将WSE3.0客户端应用于同一服务。以下是它的配置:

 <microsoft.web.services3>
  <security>
   <timeToleranceInSeconds value="10000"/>
   <x509 allowTestRoot="true" verifyTrust="true" storeLocation="CurrentUser"/>
   <binarySecurityTokenManager>
    <add valueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">
     <keyAlgorithm name="RSA15"/>
    </add>
   </binarySecurityTokenManager>
  </security>
 </microsoft.web.services3>
现在我尝试使用它来创建WCF客户端。我使用了这些建议()。我从服务和客户机契约中生成了类型,然后创建了从绑定派生的WseHttpBinding类,之后我尝试创建此自定义绑定并初始化客户机和服务证书:

 string clientCertificateName = "ClientCertificateName";
 string serviceCertificateName = "ServiceCertificateName";

 Uri uri = new Uri("http://WantedService.asmx"));

  EndpointAddress address = new EndpointAddress(uri,
                         EndpointIdentity.CreateDnsIdentity(serviceCertificateName ));

  WseHttpBinding binding = new WseHttpBinding()
  {
    SecurityAssertion = WseSecurityAssertion.MutualCertificate10,
    EstablishSecurityContext = false,
    RequireSignatureConfirmation = false,
    MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt,
    RequireDerivedKeys = false
  };

  WantedServiceClient client = new CreativeGroupCurrencyServiceClient(binding, address);

// Set up certificates      
client.ClientCredentials.ServiceCertificate.SetScopedCertificate(
                             StoreLocation.LocalMachine,
                             StoreName.My,
                             X509FindType.FindBySubjectName,
                             serviceCertificateName , 
                            uri);

  client.ClientCredentials.ClientCertificate.SetCertificate(
                             StoreLocation.LocalMachine,
                             StoreName.My,
                             X509FindType.FindBySubjectName,
                             clientCertificateName);

  WantedMethodResponse response = client.WantedMethod(new GetCurrenciesRequest());
但出现了一个例外:

System.Xml.XmlException:无法读取 银行的代币 “SignatureConfirmation”元素,带有 这个 '' 名称空间 BinarySecretSecurityToken,带有“” 值类型。如果该元素是预期的 要使其有效,请确保安全性 配置为使用 名称、命名空间和值类型 指定的

为什么它不起作用?为什么该计划是1.1?我应该在安全绑定元素的MessageSecurityVersion中使用WS-Secure 1.1吗?哪一个呢?我试过这个:

  WseHttpBinding binding = new WseHttpBinding()
  {
    SecurityAssertion = WseSecurityAssertion.MutualCertificate11,
    ...
  };
哪一个使用WS-Security 1.1-
MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11
(在WseHttpBinding中配置时)但也失败:

System.ServiceModel.Security.MessageSecurityException: 不需要签名确认 在安全标头中

我不知道我现在还能做什么!看来我什么都试过了

根据这篇文章,msdn中关于wcf wse兼容性的内容有一个错误。特别是关于消息版本。这可能是导致您出现问题的原因

  WseHttpBinding binding = new WseHttpBinding()
  {
    SecurityAssertion = WseSecurityAssertion.MutualCertificate11,
    ...
  };