gpt4 book ai didi

c# - 如果为 ApplicationException 指定了内部异常,则 WCF FaultException 失败

转载 作者:行者123 更新时间:2023-11-30 17:00:16 26 4
gpt4 key购买 nike

我一直在调试我新创建的 WCF 服务故障合约的问题,并最终找到了问题所在。

我这样定义服务:

[ServiceContract]

public interface IService1
{

[OperationContract]
[FaultContract(typeof(ApplicationException))]
string GetData();
}

在我的服务中,我是这样处理服务中的异常的:

    public string GetData()
{
try
{
// do stuff
}
catch(Exception e)
{
ApplicationException ae = new ApplicationException("oh dear!", e );
throw new FaultException<ApplicationException>( ae,
new FaultReason(ae.Message));
}
}

但是,客户端永远不会收到故障异常,而是会收到一个异常:

An error occurred while receiving the HTTP response to ... This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server ( possibly due to the service shutting down).See server logs for more details

如果我像这样更改我在服务上的代码(即:在构造 ApplicationException 时不要设置内部异常)它会按预期工作。

    public string GetData()
{
try
{
// do stuff
}
catch(Exception e)
{
ApplicationException ae = new ApplicationException("oh dear!");
throw new FaultException<ApplicationException>( ae,
new FaultReason(ae.Message));
}
}

如果设置了内部异常,谁能解释为什么这可能会失败?我在文档中的任何地方都看不到它。

最佳答案

ApplicationException通过 FaultException<T> 发送给客户端没有 InnerException , 然后它仅作为 string 发送.但是,当 InnerException已设置,则 ApplicationException本身被发送。

Exception类型在 .NET 中是可序列化的(它经常被错误地引用为不可序列化),但是, Data 的内容通常是属性不可序列化。这将导致序列化问题,我相信您正在遇到这种情况。

此问题有一些解决方法:您可以设置 Data属性(property)null通过使用反射或者你可以创建自己的类。

关于c# - 如果为 ApplicationException 指定了内部异常,则 WCF FaultException<ApplicationException> 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22446096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com