3

我正在开发一个应用程序,它将部署在包括 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 紧凑型中实现它。

任何帮助将不胜感激。

谢谢大卫

4

0 回答 0