.Net 5.0 中的 Endpoint.Behaviors 和 clientRuntime.MessageInspectors 在哪里?

Posted

技术标签:

【中文标题】.Net 5.0 中的 Endpoint.Behaviors 和 clientRuntime.MessageInspectors 在哪里?【英文标题】:Where are Endpoint.Behaviors and clientRuntime.MessageInspectors in .Net 5.0? 【发布时间】:2021-06-09 12:14:35 【问题描述】:

在 4.8 之前的所有 .Net 版本中,可以使用 IEndpointBehavior / IClientMessageInspector 轻松捕获与 WCF 一起使用的 SOAP 服务的所有传入和传出流量,用于记录目的,如下所述,例如:https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.dispatcher.iclientmessageinspector.beforesendrequest?view=netframework-4.8

我想知道如何恢复它,或者在 .Net 5.0 中实现与以前相同的目的。我需要在日志文件中跟踪所有 SOAP 交换,以前我只需要这样做:

public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)

    _logger.Debug("Reply received: " + Environment.NewLine + "0", reply.ToString());

public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)

    _logger.Debug("Sending request: " + Environment.NewLine + "0", request.ToString());
    return null;

要让它工作,您需要 clientRuntime.MessageInspectors 和 client.Endpoint.Behaviors 来注册类。

尽管我已经注册了可用于 System.ServiceModel 的 nuget 包,尤其是 System.ServiceModel.Primitives.dll,但这些属性似乎不再存在。

【问题讨论】:

.net 5 不支持 wcf 的许多功能,您可以查看此链接:devblogs.microsoft.com/dotnet/…。你可以试试grpc来代替wcf。 @TheobaldDu 关于 grpc,我必须使用旧的 SOAP 服务,所以它似乎不相关。是否有任何解决方案可以在 .Net 5.0 中处理服务客户端代理时启用日志记录?也许是 WCF 的免费替代品或某种中间件来启用?谢谢 【参考方案1】:

实际上,这些功能仍然存在,而且看起来和以前一样。属性略有变化。

client.Endpoint.Behaviors.Add(new LoggerEndpointBehavior(_logger)); 变成了client.Endpoint.EndpointBehaviors.Add(new LoggerEndpointBehavior(_logger));

clientRuntime.MessageInspectors.Add(new LoggerClientMessageLoggerInspector(_logger)); 变成clientRuntime.ClientMessageInspectors.Add(new LoggerClientMessageLoggerInspector(_logger));

其他一切都与第一个链接中的示例相同。 我很惊讶在迁移时没有看到 Intellisense 的这些建议,但它现在有效!

【讨论】:

以上是关于.Net 5.0 中的 Endpoint.Behaviors 和 clientRuntime.MessageInspectors 在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

.net 5.0 中的 JsonConsole

.Net 5.0 中的 Endpoint.Behaviors 和 clientRuntime.MessageInspectors 在哪里?

通过 ASP.NET Core 3.1/5.0 MVC 中的脚本使用选定的 ''value='' 填充数据库

ASP.Net Core 5.0 中的子域路由

ASP.NET Core 5.0 WebAPI 中的多种身份验证方案

如何摆脱 Net 5.0 版本中的“%AppName%.runtimeconfig.dev.json”文件