这几天再配置 wcf  记录一下

1.服务端

<services>      
      <service name="BondDBService.Host.Lib.BondDataService" behaviorConfiguration="customBehavior">       
        <endpoint binding="netTcpBinding" bindingConfiguration="netCustomBinding" contract="Pengyuan.ServiceContract.BondDB.IBondDataService" address="" />  
        <endpoint binding="mexTcpBinding" contract="IMetadataExchange" address="mex" />    
        <host><baseAddresses><add baseAddress="net.tcp://localhost:12347/BondDataService"/> </baseAddresses>
        </host>
      </service>
      <service name="Pengyuan.ServiceContract.Impl.BondDB.BondDataService" behaviorConfiguration="customBehavior">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="netCustomBinding" contract="Pengyuan.ServiceContract.BondDB.IBondDataService"/>
        <endpoint binding="mexTcpBinding" contract="IMetadataExchange" address="mex" />
        <host><baseAddresses><add baseAddress="net.tcp://localhost:12347/Impl/BondDataService"/> </baseAddresses>  </host>
      </service>
      
    </services> 

 

服务端的 发布的服务是放在Services 里面的 ,里面的每个Service对应一个服务,每个服务有:行为配置,协议配置,地址,名称,接口协议

名称 ,对于每个服务来说,就是服务的实现。

行为配置,一般在服务名称后面,有的是必须的,比tcp服务的协议的服务就必须有个行为的配置,以通过交换接口IMetadataExchange 开放出 服务协议

协议配置  这个就是传说的b了。b里面东西挺多的,有个传输模式如下,可以用流或者缓存方式,配不对会报 “组帧模式” 的错误。

<netTcpBinding>
        <binding name="netCustomBinding"  transferMode="Streamed" maxReceivedMessageSize="2147483647">
        </binding>
      </netTcpBinding>

地址 就是传说的a了

接口协议,一般就是接口的全名称

svc文件其实可以不要的,只要在配置文件里加上,

<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
      <serviceActivations>
        <!--Impl svc-->      
        <add relativeAddress="" service="Pengyuan.ServiceContract.Impl.BondDB.BondDataService"/>
      </serviceActivations>
    </serviceHostingEnvironment>

第二个服务就不需要svc文件。

引用nettcp服务的时候要加上mex ,生成代理,比如

net.tcp://localhost:12347/Impl/BondDataService/mex

 更清楚的,引用一下:http://www.cnblogs.com/TivonStone/archive/2011/05/11/2043694.html

客户端:客户端引用有几种方式,其实是一种。