WCF中地址是 客户端访问系统的必要元素. 所以还是有必要搞清楚的..
首先你必须放慢看这篇文章的速度,慢慢来. 挺不好理解的.
物理地址, 客户端通过 物理地址 发送消息给服务端(可以理解为常见的网址URL)
逻辑地址, ChannelDispatcher通过遍历EndpointDispatcher以确定将消息发送到哪一个EndpointDispatcher时,使用逻辑地址进行判断(我目前自己理解为转发后的目标地址.对不对还不知道.读者审读)
一般情况下,物理地址跟逻辑地址相同. 何时不同的?什么场景下才会不同? 我还不知道. 期待专家指点…
打住, 下面的几个地址其实是 物理地址 配置上的几种不同写法. 仔细看一遍代码就知道了.
基地址
<system.serviceModel>
<services>
<service name="TestReportA.api.user.LoginServices">
<host> <!--这个host下baseAddresses指定的地址就是 这个service的基地址 -->
<baseAddresses>
<add baseAddress="http://127.0.0.1:8888/Calculator"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
相对地址1
<system.serviceModel>
<services>
<service name="TestReportA.api.user.LoginServices">
<!--下面这个address 为空的时候地址就是baseAddresses指定的基地址 -->
<!-- 逻辑地址为 http://127.0.0.1:8888/Calculator -->
<!-- 物理地址为 http://127.0.0.1:8888/Calculator -->
<endpoint address="" binding="basicHttpBinding" contract="Contracts.ICalculator" > </endpoint>
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:8888/Calculator"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
相对地址2
<system.serviceModel>
<services>
<service name="TestReportA.api.user.LoginServices">
<!--下面这个address 不为空的 时候跟基地址合并起来就是真实 物理地址 -->
<!-- 逻辑地址为 http://127.0.0.1:8888/Calculator/Service -->
<!-- 物理地址为 http://127.0.0.1:8888/Calculator/Service -->
<endpoint address="Service" binding="basicHttpBinding" contract="Contracts.ICalculator" > </endpoint>
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:8888/Calculator"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
绝对地址
<system.serviceModel>
<services>
<service name="TestReportA.api.user.LoginServices">
<!-- 带http开头了. 就跟下面的 baseAddresses 没啥关系了.所以叫绝对地址-->
<!-- 逻辑地址为 http://127.0.0.1:8888/ABCSDDD/BBB-->
<!-- 物理地址为 http://127.0.0.1:8888/ABCSDDD/BBB-->
<endpoint address="http://127.0.0.1:8888/ABCSDDD/BBB" binding="basicHttpBinding" contract="Contracts.ICalculator" > </endpoint>
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:8888/Calculator"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
逻辑地址与物理地址 不同的配置方法
<system.serviceModel>
<services>
<service name="TestReportA.api.user.LoginServices">
<!-- 逻辑地址为 http://127.0.0.1:9999/CalculatorService-->
<!-- 物理地址为 http://127.0.0.1:3333/CalculatorService3-->
<endpoint binding="basicHttpBinding" contract="Contracts.ICalculator" address="http://127.0.0.1:9999/CalculatorService" listenUri="http://127.0.0.1:3333/CalculatorService3" listenUriMode="Unique">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:8888/Calculator"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>