WCF获取“主要签名必须加密”。来自FaultContract和ProtectionLevel.None

时间:2009-05-13 21:35:16

标签: wcf wcf-security wcf-faults

我有一个现有的asp.net应用程序,用于加载平衡的wcf服务(iis托管,在配置为servicePrincipalName的帐户下运行的应用程序池中,等等)。 wcf服务返回一些自定义错误,全部使用FaultContract(typeof(x),ProtectionLevel = ProtectionLevel.None)定义 - 这些服务不向公众公开。客户端使用“服务引用”生成的类来访问服务。

这已经运行良好但现在,使用最新的代码库,我们得到“主要签名必须加密”。当服务返回其中一个故障时,客户端上的异常。服务代码和配置保持不变(至少是产生故障的遗留部分)。客户端服务引用生成的代码看起来变化最大(通常会被删除并重新创建)。

安全配置保持一年以上。所有更新都是最新的。我们已在三个环境中对此进行了测试,并且一旦部署新的代码库,故障就会开始生成异常。看起来它必须在生成的类中,但它们是由Visual Studio生成的,所以它非常令人困惑。

这听起来对任何人都很熟悉吗?有什么建议吗?

更新:删除ProtectionLevel属性并允许它默认使问题“消失”,但我很好奇为什么指定None会导致它失败。也许它与操作合同或服务合同的默认级别相冲突,但这些值在过去一年中没有变化,因此无法解释为什么现在的工作没有。

更新:对于它的价值,代码类的这一变化发生在2.0.50727.3053和2.0.50727.3082之间(根据生成的代码中的运行时版本注释)。

1 个答案:

答案 0 :(得分:0)

我自己没有遇到过这个问题,但我的问题是:为什么你在故障合同中指定了“ProtectionLevel = None”?有什么特别的原因吗?

如果没有,我强烈建议不要指定 - 默认值是ProtectionLevel = EncryptAndSign,这通常是你最好的选择。尝试一下,除非你有一个非常强烈和明确的理由反对它。

马克