这是.Net 4,完整框架。
我正在尝试创建一个简单的winforms应用程序,它将进行一些简单的WCF REST调用。它使用ChannelFactory和服务合同接口。在界面中的~20个方法中,其中2个涉及Stream(上传和下载方法),因此服务端(当前也是客户端)使用TransferMode = Streamed。
我的目标是在winforms应用程序的文本框中包含完整的HTTP请求和响应(很像你在ethereal / wireshark或fiddler中看到的那样)和标题(只是为了显示过去的内容)线)
在尝试使用内置诊断(通过SvcConfigEditor)和我自己(通过实现IClientMessageInspector然后IEndpointBehavior添加检查器,然后channelFactory.Endpoint.Behaviors.Add添加行为:),我有2个问题:
一个回退是将客户端移动到缓冲区,然后只更改为一个上传调用的StreamedRequest和下载调用的StreamedResponse(但是我必须以编程方式AFAICT执行此操作,因为它是在绑定级别设置的配置,我不会看到通过调用上的属性做到这一点),这将照顾'body'部分,并留下我只是“获取http请求标题”(问题#1,特别是request.Properties [“httpRequest”]。标题是空的)要处理,但我希望有一些方法可以记录“原始”消息而不这样做,将TransferMode保留为流式。
谢谢!
答案 0 :(得分:1)
我现在找不到任何引用,但是已知的事实是您无法将流式消息的内容捕获到WCF跟踪。启用流式传输时,只会跟踪邮件的标题。
以下是MSDN上的来源:Configuring Message Logging
请参阅页面末尾:
服务水平
此层记录的消息是 即将进入(接收)或离开 (在发送时)用户代码。如果过滤器 已定义,只有消息 匹配过滤器已记录。 否则,服务中的所有消息 记录级别。基础设施 消息(交易,同行渠道, 和安全性)也记录在此 级别,可靠消息除外 消息。 仅限流式传输消息 标题已被记录。此外, 安全消息被解密记录 在这个级别。