我有一个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>
?
如果我从Exception
删除MyException
继承,一切正常(但我想要一致性,所以我希望它是一个实际的例外)。如果保留Exception
继承,则没有任何更改,但它使用[DataContract]
进行修饰。
为什么? FileNotFoundException
也继承自Exception
。一个有效,另一个无效。令人沮丧!
P.S。:服务器和客户端共享接口和类定义的相同程序集,因此不应存在任何合同不匹配。
答案 0 :(得分:1)
您的例外应该是[Serializable]
。我认为这样可以解决你的问题。
作为best practice for Exceptions,您还应该实现三个构造函数。