【发布时间】:2016-07-02 13:35:16
【问题描述】:
我有一个 WCF 服务,当出现问题时会抛出 FaultExceptions。抛出的一些错误类可以正常工作,但其他一些则根本不起作用并给出以下错误:
接收到http://localhost/MyService 的 HTTP 响应时出错。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。
有一个内部异常说
底层连接已关闭:接收时发生意外错误。
我的代码是这样工作的:
服务器
public Stream DoSomething() {
if (someCondition) {
if (fileExists) {
return new Stream(); // I know I can't do this, but for example purpose only :)
}
throw new FaultException<System.IO.FileNotFoundException>(new FileNotFoundException());
}
throw new FaultException<MyException>(new MyException());
}
异常类
public class MyException: Exception
{
}
客户
try {
wcfClient.DoSomething();
} catch (FaultException<FileNotFoundException>) {
// This works just fine
} catch (FaultException<MyException>) {
// This gives the error listed above
}
FileNotFoundException 和 MyException 都在合约中设置:
[FaultContract(typeof(FileNotFoundException))]
[FaultContract(typeof(MyException))]
为什么FaultException<FileNotFoundException> 可以正常工作,而FaultException<MyException> 不行?
如果我从MyException 中删除Exception 继承,一切都会正常运行(但我想要一致性,所以我希望它是一个实际的例外)。保留Exception继承没有变化,但是用[DataContract]装饰。
这是为什么呢? FileNotFoundException 也继承自 Exception。一个有效,另一个无效。令人沮丧!
P.S.:服务器和客户端共享定义接口和类的同一个程序集,因此不应该有任何合同不匹配。
【问题讨论】:
-
如果您可以发布不起作用的异常类的实际代码,这将有所帮助。它看起来像什么?
-
它看起来和我发布的 (
MyException) 完全一样。唯一的区别是类的名称。
标签: c# .net wcf exception exception-handling