2010-07-29 32 views
5

Chúng ta có thể thêm tiêu đề tin nhắn để nhắn WCF bằng cách thêm thuộc tính MessageHeader nhưđộng thêm tiêu đề được mã hóa thông điệp WCF

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

Câu hỏi đầu tiên này, làm thế nào an toàn là thế này, và điều này làm việc cho tất cả các loại bindings WCF?

và câu hỏi thứ hai, có thể thêm tiêu đề được mã hóa vào tất cả thư và trích xuất trong phần máy chủ động như thế này không?

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

Trả lời

2

Bạn có thể sử dụng IServiceBehavior mà lần lượt sẽ sử dụng DispatchMessageInspector.

Đối với các proxy client bạn sẽ tạo ra một IEndpointBehavior mà sẽ sử dụng một IClientMessageInspector

Các IClientMessageInspector sẽ nhanh chóng một MessageHeader hoặc một loại có nguồn gốc và thêm nó vào mỗi yêu cầu bên trong phương pháp BeforeSendRequest.

DispatchMessageInspector sẽ phân tích từng yêu cầu bên trong phương thức AfterReceiveRequest và trích xuất tiêu đề từ đó.

Một lưu ý của điều này là tôi không nghĩ rằng mục đích hoặc tiêu đề này sẽ được ghi lại bên trong WSDL. FOr mà tôi nghĩ rằng bạn sẽ phải kiểm soát bằng cách sử dụng một triển khai tùy chỉnh của giao diện IWsdlExportExtension.

Andrew

+0

Tôi biết về IServiceBehavior, nhưng có vẻ như nó không hoạt động đối với liên kết PollingDuplex cho Silverlight ... –

Các vấn đề liên quan