2012-08-06 74 views
5

我在C#.NET Framework 3.5中一個簡單的Web客戶端調用像這樣的SOAP服務的HelloWorld:增加頭部到.NET 3.5 WCF客戶

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

我使用一些中間件,增加了基本安全通過請求Authorization Header:「Authorization = Bearer 123456abcd」,它與REST服務一起工作,但我想要使用上述.Net客戶端的服務...

如何將標題添加到Service Call ? 確實存在類似的東西:myservice.addHeader("authorization=blah");

+0

你創建一個 「添加服務引用」 客戶端? – 2012-08-06 21:17:59

+0

是的,當我不使用中間件時,客戶端工作。中間件增加了安全性,並希望標題進行驗證 – nuvio 2012-08-06 21:19:49

+0

我總是討厭那種中間件。它假設一切都是手動完成的,並沒有考慮WSDL之類的東西,並且生成了代碼。 – 2012-08-06 21:22:08

回答

5

您應該使用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(); 
     } 

授權

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

有沒有辦法在全球範圍內做到這一點,比如對於大多數操作? – 2012-08-06 22:06:58

+0

由於*需要與OperationContextScope *一起使用,因此它只能通過抽象,例如在* Func <> *上更改服務調用 – GSerjo 2012-08-06 22:19:11