WCF 几种地址的说明

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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值