您现在的位置是:首页
>
将理论知识运用到实践当中 WCF从理论到实践四:路在何方
WCF从理论到实践四:路在何方 本文适合的读者 适合WCF初学者 可以没有任何SOA和其他分布式开发经验 Addre 是什么? 一个要和服务端通讯的客户端要做的第一件事情 就是搞清数据要发给谁?目的地

WCF从理论到实践四:路在何方
本文适合的读者 适合WCF初学者 可以没有任何SOA和其他分布式开发经验 Address是什么? 一个要和服务端通讯的客户端要做的第一件事情 就是搞清数据要发给谁?目的地在哪?而Address正是通过一个Uri来唯一标示一个WCF的终节点(EndPoint)的 它标示了消息发送的目的地 在WCF 数据通讯中 它解决了服务在哪里的问题 Address的组成? Address在WCF中的用System ServiceModel EndpointAddress对象来表示的 它的结构如下 组成部分 作用 Uri 指示EndPoint的地址 是必须的 Identity 能保证地址的唯一性 当Uri一致的时候 可以用Identity来区分EndPoint 可有可无 Headers 为地址提供了一些附加信息 用于Soap Message Filter 最后会添加到Soap消息的Header中 此外 Address还包括IsAnonymous属性 用于指示终节点是否能匿名访问 如何在配置文件中指定Address? 在配置文件中 有两种方式可以指定Address 一种是绝对地址方式 另外是相对地址方式 分别如下 绝对地址 <host> <baseAddresses> <add baseAddress = //localhost: / /> </baseAddresses> </host> <endpoint address =//localhost: /Service binding= basicHttpBinding contract= Wcf_Address_Config IService > </endpoint> 相对地址 <host> <baseAddresses> <add baseAddress = //localhost: / /> </baseAddresses> </host> <endpoint address = Service binding= basicHttpBinding contract= Wcf_Address_Config IService ></endpoint> 在网上有人说绝对地址是通过将GetEnabled设置为true 并且设置GetUrl为绝对地址是在设置endPoint的说法有些不准确 因为在WCF中有两种地址 一种是访问endPoint时候用到地址 另外一种是服务描述的地址 服务描述在wcf中被称作serviceMetadata 通过它能够产生代理类 比如 我们做如下的设置 <serviceMetadata GetEnabled= True GetUrl=//localhost: /Service /> 只代表//localhost: /Service/?wsdl上能找到服务描述 可以通//localhost: /Service/?wsdl生成代理类 而不是将endPoint的地址设置为//localhost: /Service 这点一定要注意 不要受有些说法的误导 如何通过编程方式设置Address? 除了能在配置中设置Address外 还可以通过编程的方式来设置Address 具体方法请参参见下面的代码示例 static void Main(string[] args) { EndpointAddress address = new EndpointAddress( ); Binding binding = new BasicHttpBinding(); wcf IService service = new wcf Service Client(binding address); Console WriteLine(service GetData( )); Console Read(); } 上面的代码就是将endPoint的地址设置为了 Address有什么特殊应用? 在wcf中 能够将服务同时发布到几个地址上面 只要这些地址采用的都是一种访问方式 这种一份程序 多个发布地址的做法 在以往的技术中是没有的 lishixinzhi/Article/program/net/201311/11681 很赞哦! (1049)