WCF終結(jié)點地址基本內(nèi)容概述
WCF開發(fā)工具是一款功能強大的開發(fā)插件,其應(yīng)用技術(shù)也比較繁多,可以靈活的應(yīng)用在開發(fā)才過程中。其中,在WCF中提供了基址技術(shù),這使的我們在指定WCF終結(jié)點地址時可以酌情選用相對地址或者絕對地址,指定絕對地址的方法是在終結(jié)點定義中提供完全限定的地址,如下代碼所示:
- < service name="TerryLee.WCFAddressing.Service.CalculatorService"
 - behaviorConfiguration="calculatorBehavior">
 - < endpoint address="http://localhost:8887/CalculatorService"
 - binding ="basicHttpBinding"
 - contract="TerryLee.WCFAddressing.Contract.ICalculator">
 - < /endpoint>
 - < /service>
 
使用絕對地址固然簡單,但是如果我們的服務(wù)需要公開多個終結(jié)點,而這些WCF終結(jié)點地址又具有相同的基地址時,也許相對地址是更好的選擇。在創(chuàng)建服務(wù)宿主對象時,提供一個基地址,如下代碼所示:
- 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());
 - };
 - calculatorServiceHost.Open();
 - Console.Read();
 - }
 
又或者同時在配置文件中指定基地址,這樣就無須在每個終結(jié)點中指定絕對地址了,如下代碼所示:
- < service name="TerryLee.WCFAddressing.Service.CalculatorService"
 - behaviorConfiguration="calculatorBehavior">
 - < host>
 - < baseAddresses>
 - < add baseAddress="http://localhost:8887/Calculator"/>
 - < /baseAddresses>
 - < /host>
 - < endpoint address="myservice1"
 - binding ="basicHttpBinding"
 - contract="TerryLee.WCFAddressing.Contract.ICalculator">
 - < /endpoint>
 - < endpoint address="myservice2"
 - binding ="wsHttpBinding"
 - contract="TerryLee.WCFAddressing.Contract.ICalculator">
 - < /endpoint>
 - < /service>
 
但請注意,基址技術(shù)是為我們在配置終結(jié)點時提供了方便,客戶端對它是毫無所知的,客戶端看到的仍然是絕對地址,在打開服務(wù)宿主時,它會匹配所有的相對地址,從而為每個終結(jié)點提供相應(yīng)的絕對地址,如上面的示例,可以在WSDL中看到:
- < wsdl:service name="CalculatorService">
 - < wsdl:port name="BasicHttpBinding_ICalculator"
 
binding="tns:BasicHttpBinding_ICalculator">- < soap:address location="http://localhost:8887/Calculator/myservice1" />
 - < /wsdl:port>
 - < wsdl:port name="WSHttpBinding_ICalculator"
 
binding="tns:WSHttpBinding_ICalculator">- < soap12:address location="http://localhost:8887/Calculator/myservice2" />
 - < wsa10:EndpointReference>
 - < wsa10:Address>http://localhost:8887/Calculator/myservice2< /wsa10:Address>
 - < Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
 - < Upn>TerryLee-PC\TerryLee< /Upn>
 - < /Identity>
 - < /wsa10:EndpointReference>
 - < /wsdl:port>
 - < /wsdl:service>
 
如果在指定了基地址的情況下,有以下幾種情況:指定相對地址為空,WCF終結(jié)點地址與基地址相同;指定相對地址不為空,追加相對地址到基地址上;指定一個絕對地址,基地址不起作用,終結(jié)點地址仍然為指定的絕對地址;指定一個絕對地址和一個與基地址不同的綁定,基地址不起作用。現(xiàn)在有這樣一段配置信息:
- < 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">
 - < /endpoint>
 - < endpoint address="myservice2"
 - binding ="wsHttpBinding"
 - contract="TerryLee.WCFAddressing.Contract.ICalculator">
 - < /endpoint>
 - < endpoint address="http://localhost:8886/CalculatorService"
 - binding ="wsHttpBinding"
 - contract="TerryLee.WCFAddressing.Contract.ICalculator">
 - < /endpoint>
 - < endpoint address="net.tcp://localhost:8885/Calculator"
 - binding ="netTcpBinding"
 - contract="TerryLee.WCFAddressing.Contract.ICalculator">
 - < /endpoint>
 - < /service>
 
可以在ServiceHost啟動后,輸出所有的WCF終結(jié)點地址和綁定信息,如下代碼:
- ServiceDescription desc = calculatorServiceHost.Description;
 - foreach (ServiceEndpoint endpoint in desc.Endpoints)
 - {
 - Console.WriteLine("Endpoint - address: {0}", endpoint.Address);
 - Console.WriteLine(" binding: {0}", endpoint.Binding.Name);
 - Console.WriteLine(" contract: {0}", endpoint.Contract.Name);
 - }
 
【編輯推薦】















 
 
 
 
 
 
 