关于在ExceptionShielding下发生的wcf:System.ServiceModel.Security.MessageSecurityException

System.ServiceModel.Security.MessageSecurityException occuring under ExceptionShielding

我们将使用Enterprise Library 4.1异常处理应用程序块的异常屏蔽功能,并将自定义RoleProvider与我们的WCF服务结合使用。

当RoleProvider确定用户不在角色中并从IsInRole方法返回False时,将发生以下异常:

1
2
    System.ServiceModel.Security.MessageSecurityException, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    No signature message parts were specified for messages with the '{XXX}' action.

然后,wcf中止服务操作的RequestContext,客户机超时。

我尝试过此链接中提到的解决方案,但没有成功:

http://www.codeplex.com/entlib/thread/view.aspx?苏塞德=25236

我们还从ehab策略中删除了System.Exception异常类型,有效地使ehab对该策略不做任何操作,这没有任何效果。

唯一阻止这个异常的是注释掉服务实现上的ExceptionShielding属性。

对于这个问题的任何解决方案都将非常感谢。


我花了好几个小时试图找出原因。我把答案贴在这里了。

基本上,您需要定义故障操作并将其设置为相同的名称空间。