我试图在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?
答案 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)