Wcf从操作中获取原始请求

时间:2014-10-29 09:30:29

标签: c# wcf soap

我经常搜索一个很好的答案,但得到了许多不能让我满意的答案。

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

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

2 个答案:

答案 0 :(得分:3)

对于我自己,我找到了这个解决方案来获取框架4.5中的原始肥皂消息:

OperationContext.Current.RequestContext.RequestMessage.ToString()

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

答案 1 :(得分:2)

我无法使用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。稍后,在IErrorHandler&#39; ProvideFault(...)中,我将保存的字符串转移到Exception的Data属性中,以便日志记录稍后在{{1}时捕获它运行HandleError(...)在运行Items时为空。