gpt4 book ai didi

wcf - 抛出通用的 FaultException

转载 作者:行者123 更新时间:2023-12-03 18:09:15 24 4
gpt4 key购买 nike

我有一个 WCF 服务,如果出现问题,它会抛出一个通用的 FaultException。
我不知道为什么,有时客户端会捕获非泛型 FaultException 而不是泛型异常。

有谁知道,问题是什么?

最佳答案

您的服务需要处理所有异常并将它们包装到 FaultException 中,其中 T 是您编写的数据协定。因此,第一步是定义一个包含您的异常信息的自定义数据协定:

[DataContract]
public class CustomFault
{
public string Message { get; set; }
}

然后您指示您的服务契约(Contract),它的方法可能会抛出 FaultException 。这允许服务在 wsdl 中公开 CustomFault 类,以便客户端可以生成代理类:
[ServiceContract]
public interface IMyServiceContract
{
[FaultContract(typeof(CustomFault))]
void MyMethod(string someArgument);
}

下一步是实现这个接口(interface):
public class MyService : IMyServiceContract
{
public void MyMethod(string someArgument)
{
// Do something here that could throw exceptions but don't catch yet
}
}

要处理异常,您可以实现 IErrorHandler每当您的服务方法之一引发异常时,都会使用它。此错误处理程序的目的是将异常包装到 FaultException 中:
public class MyErrorHandler : IErrorHandler
{
public bool HandleError(Exception error)
{
return true;
}

public void ProvideFault(Exception error, MessageVersion version, ref Message msg)
{
var customFault = new CustomFault()
{
Message = error.Message,
};
var fe = new FaultException<CustomFault>(customFault);
MessageFault fault = fe.CreateMessageFault();
string ns = "http://somenamespace/whatever";
msg = Message.CreateMessage(version, fault, ns);
}
}

在客户端注册错误处理程序后,您将始终得到 FaultException

关于wcf - 抛出通用的 FaultException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/648084/

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