WCF尋址報頭經(jīng)驗之談
WCF中的地址獲取在實際編程中是一個比較重要的操作技術(shù)。我們今天為大家介紹的是有關(guān)這方面的一些基礎(chǔ)知識,比如有關(guān)WCF尋址報頭的一些應(yīng)用技巧。希望可以給大家?guī)硪恍椭?/p>
在某些情況下,我們可能希望通過自定義尋址報頭來解決一些復雜的問題,如根據(jù)根據(jù)傳入的WCF尋址報頭中是否包含某些信息,將其轉(zhuǎn)發(fā)到不同的終結(jié)點,通過自定義尋址報頭,可以實現(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中可以看到該自定義的報頭,它作為終結(jié)點引用的引用參數(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)容就為大家介紹到這里。
【編輯推薦】















 
 
 
 
 
 
 