我一直在阅读有关FaultContract的内容并认为它很方便。所以我用
来装饰我的一些方法 [OperationContract]
[FaultContract(typeof(MyFault)]
string DoTransform(string somethingUseless);
然后在服务器代码中,当给定某些输入时,我会逐步抛出FaultException。
在客户端,所有CodeDom都是使用SvcUtil重新生成的,我在服务客户端等中看到了FaultContracts。
在Client表单上,我有一个try / catch来捕获FaultException。
问题是,当我使用故意触发错误的数据调用操作契约时,服务会抛出一个新的FaultException。我期待它被客户端捕获但是没有,相反我得到了一个未处理的CommunicationException。
它在正常输入下工作正常但是当我给出在相同操作契约上运行FaultContract的输入时,而不是获得FaultException我得到一个CommunicationException。如果我删除有条件地抛出异常的'if'语句,那么一切都很好。
我正在做所有的事情 http://msdn.microsoft.com/en-us/library/ms752208.aspx 只是用不同的名字。因此,如果我不对它做任何事情它工作正常,如果另一方面我使用它:
long digits;
if (!long.TryParse(data, out digits))
throw new FaultException<MyFault>(new MyFault("dummy thing"));
然后当满足条件(数据未解析为长)时,我得到一个CommunicationException。
我错过了一些重要或微妙的事实吗?