Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
.net soap响应主体的WCF部分被签名,而不是整个主体_.net_Web Services_Wcf_Soap_Wcf Security - Fatal编程技术网

.net soap响应主体的WCF部分被签名,而不是整个主体

.net soap响应主体的WCF部分被签名,而不是整个主体,.net,web-services,wcf,soap,wcf-security,.net,Web Services,Wcf,Soap,Wcf Security,我创建了一个WCF客户机来使用JavaWeb服务。soap 1.1请求和响应使用X509证书进行签名和加密。我当前在尝试读取响应数据时收到以下异常 无法解析签名中的“#id-1234”URI以计算摘要 对于主体本身已签名的响应,客户端可以正常工作。对于这个特定的响应,主体本身没有签名。正文中的一部分已签名。例如: <Body> <myResponseModel> <result> <item wsu:Id="id-1

我创建了一个WCF客户机来使用JavaWeb服务。soap 1.1请求和响应使用X509证书进行签名和加密。我当前在尝试读取响应数据时收到以下异常

无法解析签名中的“#id-1234”URI以计算摘要

对于主体本身已签名的响应,客户端可以正常工作。对于这个特定的响应,主体本身没有签名。正文中的一部分已签名。例如:

<Body>
   <myResponseModel>
      <result>
          <item wsu:Id="id-1234" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"/>
      </result>
   </myResponseModel>
</Body>

我以前发现这样的回答,说WCF不支持签署身体的各个部分。相反,你必须在整个身体上签名。

我的问题是:

  • 这个事实还成立吗?如果是,背后的原因是什么
  • 我的案子有解决办法吗?我不需要从客户那里签署身体的一部分(现在)。相反,我只需要能够处理身体某部分签名的响应
  • 我不知道为什么只对Java服务的部分响应进行签名。如果我能合理解释为什么WCF不支持当前方法,我可能会建议更改该方法。我对服务代码没有任何直接控制权

    我的客户机代码有点广泛(而且是私有的),使用自定义绑定、自定义消息编码器和自定义凭据,但是如果有帮助的话,我可能会提供一些伪代码来帮助说明我的设置


    提前感谢您的帮助。

    WCF支持SOAP1.2和WS-I标准。您提到了SOAP1.1,它建议JavaWeb服务使用非标准规范。例如,代码中提到了WS-Security,它不是WS-I的一部分。但较旧的ASMX代理可以调用此类服务。您应该尝试添加Web服务引用(作为“服务引用”对话框中的选项提供),而不是服务引用。WCF还允许您创建自定义消息格式化程序,可用于模拟任何规范。感谢您的回复。是的,我尝试使用的服务并没有严格遵守标准,但谢天谢地,WCF及其可扩展性使我能够满足除本文所述之外的所有要求。我已经能够重新审视这一点,并开始按照您的建议研究定制的客户端消息格式化程序;但是,我不明白格式化程序如何帮助我更改消息响应或请求的签名和加密。请你进一步详细说明一下好吗?