我正在开发一个应用程序,它将部署在包括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 compact中实现它。
非常感谢任何帮助。
由于 大卫