2012-08-06 29 views
5

Tôi có một khách hàng web đơn giản trong C# .Net framework 3.5 mà các cuộc gọi một HelloWorld dịch vụ SOAP như thế này:Thêm Header để NET 3.5 WCF Khách hàng

HelloService myservice = new HelloService(); 
string result = myservice.HelloWorld(); 

Tôi đang sử dụng một số trung-ware có thêm an ninh cơ bản bằng cách yêu cầu Header Authorization: "Authorization = Bearer 123456abcd" hoạt động với dịch vụ REST, nhưng tôi muốn sử dụng dịch vụ với máy khách .Net ở trên ...

Làm cách nào để thêm tiêu đề vào cuộc gọi dịch vụ ? Không tồn tại một cái gì đó như: myservice.addHeader("authorization=blah");?

+0

Bạn tạo cho khách hàng "Thêm dịch vụ tham khảo"? –

+0

có, khách hàng hoạt động khi tôi không sử dụng phần mềm trung gian. Phần mềm trung gian bổ sung tính bảo mật và muốn Tiêu đề xác thực – nuvio

+0

Tôi luôn ghét loại phần mềm trung gian đó. Nó giả định mọi thứ được thực hiện thủ công, và không tính đến những thứ như WSDL, và có mã được tạo ra. –

Trả lời

5

Bạn nên sử dụng OperationContextScope

using (OperationContextScope scope = new OperationContextScope(wcfClient.InnerChannel)) 
     { 
     MessageHeader header 
      = MessageHeader.CreateHeader(
      "Service-Bound-CustomHeader", 
      "http://Microsoft.WCF.Documentation", 
      "Custom Happy Value." 
     ); 
     OperationContext.Current.OutgoingMessageHeaders.Add(header); 

     // Making calls. 
     Console.WriteLine("Enter the greeting to send: "); 
     string greeting = Console.ReadLine(); 

     //Console.ReadLine(); 
     header = MessageHeader.CreateHeader(
      "Service-Bound-OneWayHeader", 
      "http://Microsoft.WCF.Documentation", 
      "Different Happy Value." 
     ); 
     OperationContext.Current.OutgoingMessageHeaders.Add(header); 

     // One-way 
     wcfClient.Push(greeting); 
     this.wait.WaitOne(); 

     // Done with service. 
     wcfClient.Close(); 
     Console.WriteLine("Done!"); 
     Console.ReadLine(); 
     } 

Đối với Authorization

var messageProperty = new HttpRequestMessageProperty(); 
messageProperty.Headers.Add(HttpRequestHeader.Authorization, AuthorizationHeader); 
+0

Có cách nào để làm điều này trên toàn cầu hơn, giống như, đối với hầu hết các hoạt động? –

+0

Vì * sử dụng với OperationContextScope * cần thiết nên nó chỉ có thể thông qua, ví dụ: thay đổi cuộc gọi dịch vụ trên * Func <> * ví dụ – GSerjo

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