我有一个现有的asp.net应用程序,它可以与负载均衡的wcf服务对话(iis托管,在应用程序池中运行,帐户配置为servicePrincipalName,等等)。wcf服务返回一些自定义错误,所有这些错误都是用FaultContract(typeof(x),ProtectionLevel = ProtectionLevel.None)定义的--这些服务不会公开。客户端使用“服务引用”生成的类来访问服务。
这已经很好地工作了,但是现在,使用最新的代码库,我们得到了“主签名必须加密”。当服务返回这些错误之一时,客户端会发生异常。服务代码和配置保持不变(至少是生成故障的遗留部分)。客户端服务引用生成的代码似乎变化最大(它经常被删除并重新创建)。
安全配置在一年多的时间里没有变化。所有的更新都是最新的。我们已经在三个环境中对此进行了测试,一旦我们部署了新的代码库,故障就会开始生成异常。看起来它必须在生成的类中,但它们是由Visual Studio生成的,所以这非常令人困惑。
这对任何人来说都很熟悉吗?有什么建议吗?
更新:删除ProtectionLevel属性并将其设为默认值会使问题“消失”,但我很好奇为什么指定None会导致它失败。也许它与操作契约或服务契约的默认级别冲突,但这些值在过去一年中没有改变,所以这不能解释为什么现在有效的东西没有改变。
更新:就其价值而言,代码生成中的这种更改发生在2.0.50727.3053和2.0.50727.3082之间(根据生成代码中的运行时版本注释)。
发布于 2009-05-14 05:27:57
我自己没有经历过这个问题,但我的问题是:你到底为什么要在你的错误合同中指定一个"ProtectionLevel=None“?有什么特别的原因吗?
如果不是,我强烈建议不要指定它--默认值是ProtectionLevel=EncryptAndSign,这通常是你最好的选择。试一试,除非你有一个非常有力和明确的理由反对它。
Marc
https://stackoverflow.com/questions/860546
复制相似问题