gpt4 book ai didi

c# - 通过 WCF 抛出异常的正确方法

转载 作者:太空狗 更新时间:2023-10-29 21:53:40 25 4
gpt4 key购买 nike

我试图以最通用的方式通过 WCF 发送异常。这是我得到的:

[ServiceContract]
interface IContract
{
[OperationContract]
void Foo();
}

class ContractImplementation: IContract
{
public void Foo()
{
try
{
Bar();
}
catch (Exception ex)
{
throw new FaultException<Exception>(ex, ex.Message);
}
}
}

Bar 中实际出现的异常是:

[Serializable]
class MyException : Exception
{
// serialization constructors
}

我在服务器端 WCF 日志记录中看到的错误是:

Type 'MyException' with data contract name 'MyException:http://schemas.datacontract.org/2004/07/MyException' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.

到目前为止我尝试了什么:

[ServiceKnownType(typeof(MyException))]
[ServiceContract]
interface IContract
{
[FaultContract(typeof(MyException))]
[OperationContract]
void Foo();
}

但没有运气。

最佳答案

首先,在 MyException 中,移除对 Exception 的继承并将其公开。

其次,当你声明你的服务契约(Contract)时,声明异常如下:

[FaultContractAttribute(
typeof(MyException),
Action = "",
Name = "MyException",
Namespace = "YourNamespace")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)]
[OperationContract]
void Foo()

最后,您可以像这样抛出异常:

throw new FaultException<MyException>
(
new MyException(ex.Message),
new FaultReason("Description of your Fault")

);

希望对您有所帮助。

关于c# - 通过 WCF 抛出异常的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138277/

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