- Microsoft Windows Communication Foundation 4.0 Cookbook for Developing SOA Applications
- Steven Cheng
- 522字
- 2021-04-13 17:04:02
The SOAP message (used by an XML Web Service and WCF service) is a standard XML document consisting of a root Envelope
tag, which in turn consists of a required Body
element and an optional Header
element. Each sub element under the optional Header
is called a SoapHeader , which plays a similar role as the other headers, uses a certain network protocol's transmit package.
A SoapHeader is often used in SOAP messages to carry some application protocol-level data in addition to the SOAP body. WCF has used many built-in SoapHeaders for certain protocols it supports (WS-Security, WS-Reliability, and so on). For some user scenarios, we will also need to add a custom SoapHeader into the WCF service message so as to exchange additional information (mostly for communication purposes).
- We need to define a custom type, which represents the SoapHeader that will be serialized in the service message. Here is a sample
DataContract
type that represents a custom header used for custom authentication:[DataContract] public class MyUsernameToken { [DataMember] public string Username { get; set; } [DataMember] public string Password { get; set; } }
- Next, we can apply the custom
Header
type into our service operation'sMessageContract
. What we should do here is mark theMessageContract
member (of theHeader
type) withMessageHeaderAttribute
.[MessageContract] public class HelloRequest { [MessageHeader] public MyUsernameToken AuthUser { get; set; } [MessageBodyMember] public string User { get; set; } } [MessageContract] public class HelloResponse { [MessageBodyMember] public string Reply { get; set; } }
- At the end, we need to use the
MessageContract
type as the only input parameter/return value of the particular service operation.
The MessageHeaderAttribute helps mark the particular type member (of MessageContract
type) as the SoapHeader that will be embedded in the resulting SOAP Envelope. Also, since the header is added in MessageContract
at design-time, the WCF auto-generated metadata will include the SoapHeader information, as shown in the following screenshot:

If you use Visual Studio or Svcutil.exe to generate the client proxy class, the generated proxy type will automatically map the SoapHeaders to operation parameters. Thus, when invoking the service operation, we can simply pass SoapHeader data as the operation parameter. The following code demonstrates how the auto-generated service proxy invokes the operation with the custom SoapHeader assigned.
private static void CallService() { TestProxy.TestServiceClient client = new TestProxy.TestServiceClient(); TestProxy.MyUsernameToken utoken = new TestProxy.MyUsernameToken{ Username="Foo", Password="Bar"}; string reply = client.SayHello(utoken, "WCF user"); Console.WriteLine(reply); }
By capturing the underlying SOAP message, we can find that the MyUsernameToken
header type is serialized as a SoapHeader within the <Header>
section.

- Midjourney AI繪畫藝術創作教程:關鍵詞設置、藝術家與風格應用175例
- 使用AADL的模型基工程:SAE體系結構分析和設計語言入門
- 邊做邊學:Photoshop CS6 圖像制作案例教程
- CoffeeScript Application Development
- AI圖像處理:Photoshop+Firefly后期處理技術基礎與實戰
- 中文版 Photoshop CC 從入門到精通
- Illustrator CC 2018中文版入門與提高
- 中文版CorelDRAW X8基礎培訓教程(全彩版)
- PS App UI設計從零開始學
- 邊做邊學:平面設計(Photoshop CS6 +CorelDRAW X6)
- Maya 2020 超級學習手冊
- Scribus 1.3.5: Beginner's Guide
- 中文版3ds Max 2014-VRay效果圖制作完全自學教程
- Magento 1.3 Theme Design
- Apache JMeter