- WCF技術(shù)剖析(卷1)
- 蔣金楠
- 561字
- 2018-12-27 11:32:44
2.3.2 邏輯地址和物理地址
在WCF中,每個(gè)終結(jié)點(diǎn)都包含兩個(gè)不同的地址:邏輯地址和物理地址。邏輯地址就是以終結(jié)點(diǎn)Address屬性表示的地址。至于物理地址,對(duì)于消息發(fā)送端來(lái)講,就是消息被真正發(fā)送的目的地址;而對(duì)于消息的接收端來(lái)講,就是監(jiān)聽(tīng)器真正監(jiān)聽(tīng)的地址。按照WS-Addressing的說(shuō)法,邏輯地址和物理地址分別對(duì)應(yīng)著地址To和Via。
服務(wù)端邏輯地址與物理地址
對(duì)于消息接收方的終結(jié)點(diǎn)來(lái)講,物理地址就是監(jiān)聽(tīng)地址,通過(guò)ServiceEndpoint的ListenUri表示。
public class ServiceEndpoint { //其他成員 public Uri ListenUri { get; set; } }
在對(duì)服務(wù)進(jìn)行寄宿的時(shí)候,可以調(diào)用ServiceHostBase或ServiceHost的AddServiceEndpoint對(duì)應(yīng)的重載來(lái)為添加的終結(jié)點(diǎn)指定ListenUri。在下面的代碼中,為終結(jié)點(diǎn)指定了一個(gè)不同于邏輯地址的物理地址(ListenUri)。
public abstract class ServiceHostBase : CommunicationObject, IExtensibleObject<ServiceHostBase>, IDisposable {
//其他成員 public ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, string address, Uri listenUri); public ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, Uri address, Uri listenUri); }
public class ServiceHost : ServiceHostBase { //其他成員 public ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, string address, Uri listenUri); public ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, Uri address, Uri listenUri); }
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService))) { serviceHost.AddServiceEndpoint(typeof(ICalculator),new WSHttpBinding(), "http://127.0.0.1:9999/CalculatorService", new Uri ("http://127.0.0.1:8888/CalculatorService")); Console.Read(); }
當(dāng)然,ListenUri也可以通過(guò)配置進(jìn)行指定,下面的配置和上面的代碼是等效的。
<configuration>
<system.serviceModel>
<services>
<service name="Artech.WcfServices.Services.CalculatorService">
<endpoint binding="wsHttpBinding"
contract="Artech.WcfServices.Contracts.ICalculator"
address="http://127.0.0.1:8888/CalculatorService"
listenUri="http://127.0.0.1:8888/CalculatorService" />
</service>
</services>
</system.serviceModel>
</configuration>
客戶(hù)端邏輯地址與物理地址
前面已提到,對(duì)于消息的發(fā)送端來(lái)講,物理地址其實(shí)就是消息發(fā)送的真正目的地址。該地址通過(guò)一個(gè)特殊的終結(jié)點(diǎn)行為(EndpointBehavior)來(lái)指定:ClientViaBehavior。ClientViaBehavior定義的URI代表該物理地址。
public class ClientViaBehavior : IEndpointBehavior { //其他成員 public Uri Uri { get; set; } }
同一般的終結(jié)點(diǎn)行為一樣,ClientViaBehavior通過(guò)相應(yīng)的配置應(yīng)用到WCF客戶(hù)端運(yùn)行時(shí)。在下面的配置中,通過(guò)viaUri設(shè)置了一個(gè)不同于終結(jié)點(diǎn)地址(http://127.0.0.1:9999/CalculatorService)的物理地址:http://127.0.0.1:8888/CalculatorService。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="clientViaBehavior"> <clientVia viaUri= "http://127.0.0.1:8888/CalculatorService" /> </behavior> </endpointBehaviors> </behaviors> <client> <endpoint address="http://127.0.0.1:9999/CalculatorService" behaviorConfiguration="clientViaBehavior" binding="wsHttpBinding" bindingConfiguration="" contract="Artech.WcfServices.Contracts.ICalculator" name="CalculatorService"> </endpoint> </client> </system.serviceModel> </configuration>
- Unity 2020 By Example
- Building a RESTful Web Service with Spring
- Xcode 7 Essentials(Second Edition)
- 網(wǎng)頁(yè)設(shè)計(jì)與制作教程(HTML+CSS+JavaScript)(第2版)
- C#程序設(shè)計(jì)教程
- jQuery從入門(mén)到精通 (軟件開(kāi)發(fā)視頻大講堂)
- 精通Scrapy網(wǎng)絡(luò)爬蟲(chóng)
- 零基礎(chǔ)入門(mén)學(xué)習(xí)Python(第2版)
- 從Java到Web程序設(shè)計(jì)教程
- Visual Basic 6.0程序設(shè)計(jì)實(shí)驗(yàn)教程
- 現(xiàn)代CPU性能分析與優(yōu)化
- ROS機(jī)器人編程實(shí)戰(zhàn)
- ASP.NET開(kāi)發(fā)寶典
- Mastering ASP.NET Web API
- MySQL從入門(mén)到精通