1

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

这工作正常,但现在,使用最新的代码库,我们得到“必须加密主签名”。当服务返回这些故障之一时,客户端上的异常。服务代码和配置没有改变(至少是产生故障的遗留部分)。客户端服务参考生成的代码似乎变化最大(它经常被删除并重新创建)。

安全配置一年多没有变化。所有更新都是最新的。我们已经在三个环境中对此进行了测试,一旦我们部署了新的代码库,错误就会开始产生异常。似乎它必须在生成的类中,但它们是由 Visual Studio 生成的,因此非常令人困惑。

这听起来很熟悉吗?有什么建议么?

更新:删除 ProtectionLevel 属性并允许它默认会使问题“消失”,但我很好奇为什么指定 None 会导致它失败。也许它与运营合同或服务合同的默认级别冲突,但这些值在过去一年中没有改变,所以这并不能解释为什么现在有效的东西没有改变。

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

4

1 回答 1

0

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

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

马克

于 2009-05-14T05:27:57.020 回答