Wcf从操作中获取原始请求

本文关键字:原始 请求 获取 操作 Wcf | 更新日期: 2023-09-27 18:28:25

我搜索了很多好答案,但得到了很多不满意的答案。

我们有一项正常运作的服务。在每个操作中,我们调用不同的项目来处理te操作,并将操作的一些信息存储在数据库中。

我们有一个新的要求:将操作的soap消息也存储在数据库中。是否可以从wcf操作接收soap(xml)?还是真的需要这个活动?

Wcf从操作中获取原始请求

我无法使用OperationContext.Current.RequestContext.RequestMessage.ToString(),因为它将请求转换为Xml。当请求是JSON时,我更希望它保持这种状态。我还发现,当调用端点的方法时,Request.InputStream是空的——即使我在web.config中有<add key="wcf:serviceHostingEnvironment:useClassicReadEntityBodyMode" value="true" />(仅供参考:应用程序正在运行.Net 4.5.2)

因此,我所做的是在Global.asax.cs中实现Application_BeginRequest。我在那里提取Request.InputStream的内容,并将请求体保存到Context.Items。稍后,在IErrorHandlerProvideFault(...)中,我将保存的字符串转移到Exception的Data属性,以便日志记录稍后在HandleError(...)运行时捕获它(HandleError运行时Items为空)。

就我自己而言,我找到了这个解决方案来获得框架4.5:中的原始soap消息

OperationContext.Current.RequestContext.RequestMessage.ToString()

阅读以上所有评论,了解有关替代方案及其问题的更多详细信息。