3

我正在尝试在带有 .net 4.5 的 VS 2012 中使用带有 Telerik OpenAccess 的 WCF 普通服务。

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

在服务接口 IEntitiesModel 我把

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

在 EntitiesModel.SVC 的方法中,我使用了一个简单的构造作为第一次尝试:

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

在消费者的用户代码中,我为异常设置了一个捕获。

现在的问题是:

每次调用该服务时,Visual Studio 都会在“throw new FaultException”中停止并显示错误消息,即用户代码未处理 FaultException。如果我继续 F5,异常也会被消费者的用户代码捕获。

为什么它在服务中停止?

在我的理解中,FaultException 是应该传递给服务消费者的东西。

我应该怎么做才能正确抛出 FaultException?

4

4 回答 4

9

转到并取消选中row 列Debug -> Exceptions下的复选框。ThrownCLR exception

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

于 2012-10-24T07:05:55.463 回答
1

这与设置有关。您可以通过转到工具-> 选项来进行所需的设置现在切换到调试菜单并取消选中
“启用异常助手”和
“仅启用我的代码” 在此处输入图像描述

于 2016-05-11T04:29:32.180 回答
0

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

你也抛出了这样的错误:

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

这符合您的声明:

[FaultContract(typeof(string))]
于 2012-10-24T07:08:40.057 回答
0

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

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

于 2012-10-24T07:17:08.640 回答