我正在开发一个应用程序,它将部署在包括 Windows Phone 在内的各种平台上。因此,我只能访问 WCF Compact / Portable 类。
我需要能够捕获每个传出请求和传入响应,以便将标头应用到请求中,并从响应中读取标头。
在扩展标准 WCF 时,我可以使用自定义行为来实现这一点,但是在 WCF compact 中不支持此功能,因此,我可以使用以下代码将标头附加到特定请求:
CalculatorServiceClient client = new CalculatorServiceClient();
using(new OperationContextScope(client.InnerChannel))
{
// We will use a custom class called UserInfo to be passed in as a MessageHeader
UserInfo userInfo = new UserInfo();
userInfo.FirstName = "John";
userInfo.LastName = "Doe";
userInfo.Age = 30;
// Add a SOAP Header to an outgoing request
MessageHeader aMessageHeader = MessageHeader.CreateHeader("UserInfo", "http://tempuri.org", userInfo);
OperationContext.Current.OutgoingMessageHeaders.Add(aMessageHeader);
}
但是,我无法在此示例中捕获响应标头。我也担心这不是线程安全的(可能同时发生多个请求)。最后,我想以一种对开发人员透明的方式来实现这个功能——这样他们就不需要做任何特殊的请求。我认为我应该能够使用类似于 IClientMessageFormatter 的东西来实现它,但是我不知道如何在 WCF 紧凑型中实现它。
任何帮助将不胜感激。
谢谢大卫