gpt4 book ai didi

.net - 如何从 AfterReceiveReply 中的 WCF 消息中提取错误代码

转载 作者:行者123 更新时间:2023-12-04 02:55:26 24 4
gpt4 key购买 nike

这是我最想做的事

    public void AfterReceiveReply(ref Message reply, object correlationState) 
{
if (reply.IsFault)
{
FaultException exp = reply.GetBody<FaultException>();
if (exp.Code.Name == "MyFaultCode")
{
//Do something here
}
}
}

但是我遇到了这个异常

Error in line 1 position 82. Expecting element 'FaultException' from namespace 'http://schemas.datacontract.org/2004/07/System.ServiceModel'.. Encountered 'Element' with name 'Fault', namespace 'http://schemas.xmlsoap.org/soap/envelope/'.

当我尝试做的时候

FaultException exp = reply.GetBody<FaultException>();

这就是我在服务器端抛出异常的方式。

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext             
instanceContext)
{
throw new FaultException("MyFaultCode", new FaultCode("MyFaultCode"));
}

有人可以告诉我如何从消息中反序列化故障异常以便我可以访问 FaultCode 吗?

最佳答案

您可以直接从 System.ServiceModel.Channels.Message 类中提取故障信息(此处为 message 变量):

var fault = MessageFault.CreateFault(message, int.MaxValue);

然后您可以从该故障中读取故障代码或消息:

var error = fault.Reason.GetMatchingTranslation().Text;

综上所述,您可以创建一个简单的验证方法:

private static void ValidateMessage(Message message)
{
if (!message.IsFault) return;
var fault = MessageFault.CreateFault(message, int.MaxValue);
var error = fault.Reason.GetMatchingTranslation().Text;
//do something :)
}

关于.net - 如何从 AfterReceiveReply 中的 WCF 消息中提取错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16800275/

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