WCF尋址報頭經(jīng)驗之談
WCF中的地址獲取在實際編程中是一個比較重要的操作技術。我們今天為大家介紹的是有關這方面的一些基礎知識,比如有關WCF尋址報頭的一些應用技巧。希望可以給大家?guī)硪恍椭?/p>
在某些情況下,我們可能希望通過自定義尋址報頭來解決一些復雜的問題,如根據(jù)根據(jù)傳入的WCF尋址報頭中是否包含某些信息,將其轉(zhuǎn)發(fā)到不同的終結點,通過自定義尋址報頭,可以實現(xiàn)SOAP消息的無限擴展,放置任何希望的控制信息到SOAP消息。如下面的代碼:
- using (ServiceHost calculatorServiceHost =
- new ServiceHost(typeof(CalculatorService),
- new Uri("http://localhost:8887/CalculatorService")))
- {
- calculatorServiceHost.Opened += delegate
- {
- Console.WriteLine("Service begin to listen via the Address:{0}",
- calculatorServiceHost.BaseAddresses[0].ToString());
- };
- AddressHeader header =
- AddressHeader.CreateAddressHeader("basic",
- "http://www.cnblogs.com/terrylee", "Terrylee");
- EndpointAddress ea = new EndpointAddress(
- new Uri("http://localhost:8887/CalculatorService"), header);
- calculatorServiceHost.Description.Endpoints.Add(
- new ServiceEndpoint(
- ContractDescription.GetContract(typeof(ICalculator)),
- new WSHttpBinding(),
- ea));
- ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
- behavior.HttpGetEnabled = true;
- calculatorServiceHost.Description.Behaviors.Add(behavior);
- calculatorServiceHost.Open();
- Console.Read();
- }
我們在WSDL中可以看到該自定義的報頭,它作為終結點引用的引用參數(shù):
- < wsdl:service name="CalculatorService">
- < wsdl:port name="WSHttpBinding_ICalculator"
binding="tns:WSHttpBinding_ICalculator">- < soap12:address location="http://localhost:8887/CalculatorService" />
- < wsa10:EndpointReference>
- < wsa10:Address>http://localhost:8887/CalculatorService
< /wsa10:Address>- < wsa10:ReferenceParameters>
- < basic xmlns="http://www.cnblogs.com/terrylee">Terrylee< /basic>
- < /wsa10:ReferenceParameters>
- < Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/
addressingidentity">- < Upn>TerryLee-PC\TerryLee< /Upn>
- < /Identity>
- < /wsa10:EndpointReference>
- < /wsdl:port>
- < /wsdl:service>
截獲到SOAP消息可以看到,在消息報頭中添加了basic這樣的信息,如下代碼所示:
- < s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
- < s:Header>
- < basic xmlns="http://www.cnblogs.com/terrylee">Terrylee< /basic>
- < To s:mustUnderstand="1">http://localhost:8887/CalculatorService< /To>
- < Action s:mustUnderstand="1">http://tempuri.org/ICalculator/Add< /Action>
- < /s:Header>
- < s:Body>
- < Add xmlns="http://tempuri.org/">
- < x>1< /x>
- < y>2< /y>
- < /Add>
- < /s:Body>
- < /s:Envelope>
當然我們也可以通過配置的方式對WCF尋址進行自定義WCF尋址報頭,如下代碼所示:
- < service name="TerryLee.WCFAddressing.Service.CalculatorService"
- behaviorConfiguration="calculatorBehavior">
- < host>
- < baseAddresses>
- < add baseAddress="http://localhost:8887/Calculator"/>
- < /baseAddresses>
- < /host>
- < endpoint address=""
- binding ="wsHttpBinding"
- contract="TerryLee.WCFAddressing.Contract.ICalculator">
- < headers>
- < basic xmlns="http://www.cnblogs.com/terrylee">Terrylee< /basic>
- < /headers>
- < /endpoint>
- < /service>
WCF尋址報頭的一些基本內(nèi)容就為大家介紹到這里。
【編輯推薦】