2010-07-29 37 views
5

我们可以通过添加MessageHeader属性将消息头添加到WCF消息,例如动态添加加密的WCF邮件头

 [MessageContract] 
public class HelloResponseMessage 
{ 
    [MessageHeader(ProtectionLevel=EncryptAndSign)] 
    public string SSN 
    { 
     get { return extra; } 
     set { this.extra = value; } 
    } 
} 

第一个问题是,这有多安全,这适用于所有类型的WCF绑定吗?

和第二个问题,是否有可能将加密的标头添加到所有消息中并在服务器部分中提取动态这样的?

MessageHeader header = MessageHeader.CreateHeader("SessionKey", "ns", _key); 
OperationContext.Current.OutgoingMessageHeaders.Add(header); 

回答

2

您可以使用IServiceBehavior,它将使用DispatchMessageInspector。

对于你将创建一个IEndpointBehavior这将使用IClientMessageInspector

的IClientMessageInspector将实例化的MessageHeader或派生类型,并将其添加到BeforeSendRequest方法内的每个请求的客户端代理。

DispatchMessageInspector将解析AfterReceiveRequest方法内的每个请求,并从那里提取标头。

一个警告是,我不认为这个意图或头将被记录在WSDL内。如果我认为您必须使用IWsdlExportExtension接口的自定义实现来控制它。

Andrew

+0

我知道IServiceBehavior,但它似乎不适用于Silverlight的PollingDuplex绑定... – 2010-07-29 14:00:38