我有一个现有的 asp.net 应用程序,它与负载平衡的 wcf 服务(iis 托管,在配置为 servicePrincipalName 的帐户下运行的应用程序池等)对话。wcf 服务返回一些自定义错误,全部使用 FaultContract(typeof(x), ProtectionLevel = ProtectionLevel.None) 定义——这些服务不向公众公开。客户端使用“服务引用”生成的类来访问服务。
这工作正常,但现在,使用最新的代码库,我们得到“必须加密主签名”。当服务返回这些故障之一时,客户端上的异常。服务代码和配置没有改变(至少是产生故障的遗留部分)。客户端服务参考生成的代码似乎变化最大(它经常被删除并重新创建)。
安全配置一年多没有变化。所有更新都是最新的。我们已经在三个环境中对此进行了测试,一旦我们部署了新的代码库,错误就会开始产生异常。似乎它必须在生成的类中,但它们是由 Visual Studio 生成的,因此非常令人困惑。
这听起来很熟悉吗?有什么建议么?
更新:删除 ProtectionLevel 属性并允许它默认会使问题“消失”,但我很好奇为什么指定 None 会导致它失败。也许它与运营合同或服务合同的默认级别冲突,但这些值在过去一年中没有改变,所以这并不能解释为什么现在有效的东西没有改变。
更新:对于它的价值,代码生成的这种变化发生在 2.0.50727.3053 和 2.0.50727.3082 之间(根据生成代码中的运行时版本注释)。