我经常搜索一个很好的答案,但得到了许多不能让我满意的答案。
我们有通常运营的服务。在每个操作中,我们调用一个不同的项目来处理te操作并在数据库中存储一些操作信息。
我们有了新的要求:将操作的soap消息也存储在数据库中。是否可以从wcf操作中接收soap(xml)?或者真的需要活动吗?
答案 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
时为空。