用户代码未处理WCF未处理的FaultException

时间:2012-10-24 07:01:02

标签: c# wcf telerik faultexception

我试图在VS 2012中使用带有.net 4.5的Telerik OpenAccess使用WCF Plain服务。

我尝试了telerik开发人员手册并创建了服务和客户端。

在服务界面IEntitiesModel中我放

[OperationContract]
[FaultContract(typeof(string))]
PersistentDto ReadPersistentDto(string dtoKey);

在方法的EntitiesModel.SVC中,我首先尝试使用easy结构:

public PersistentDto ReadPersistentDto(string dtoKey)
{
   throw new FaultException("test");
} 

在Consumer的用户代码中,我为异常设置了一个catch。

现在的问题是:

每次调用服务时,Visual Studio都会停止"抛出新的FaultException"使用错误消息,用户代码不处理FaultException。如果我继续使用F5,则消费者的用户代码也会捕获该异常。

为什么它会在服务中停止?

在我的理解中,FaultException应该传递给服务的使用者。

如何正确抛出FaultException?

4 个答案:

答案 0 :(得分:9)

转到Debug -> Exceptions,取消选中行Thrown的{​​{1}}列下的复选框。

如果选中该复选框,则会导致调试器在您抛出异常的每个位置停止。

答案 1 :(得分:0)

服务器不知道客户端将处理异常(他应该怎么做?)。这就是调试器告诉你它未被处理的原因。

你也犯了这样的错误:

public PersistentDto ReadPersistentDto(string dtoKey)
{
   throw new FaultException<string>("test");
} 

这符合您的声明:

[FaultContract(typeof(string))]

答案 2 :(得分:0)

这与debbugging有关。但是,它不会在执行时停止您的服务(除非您没有正确管理异常)。

正如RV1987所说,如果VS启用了CLR异常,它会在任何时候抛出异常时让你知道。

答案 3 :(得分:0)

这与设置有关。您可以转到工具 - &gt;进行必要的设置。选项 现在切换到调试菜单并取消选中
“启用例外助手”和
“只启用我的代码” enter image description here