年前辞职-WCF入门学习(5)

前言

第五集比较简单,视频也只有7分多钟,但是用处还是挺大的。下面我会介绍。

本来想第六集一起介绍的,后来发现第六集内容比较多,有半个多小时,就不一起了。网站规定6小时内只能发布一篇文章到首页,,那我就11点再发布吧。

第五集 How to make changes to WCF service without breaking clients (在不修改客户端的情况下更新WCF服务)

这集的大部分代码用的是第三集的内容。他的场景是这样的:假设我们已经写好了服务,但是某天重构代码的时候发现有个ServiceContract名字需要修改,服务端当然没事,改接口名字,改配置文件,一切顺利。但是客户端就不那么轻松了,我最先想到的就是客户端重新引用服务,显然这是一种极其不合理的方法,因为那样所有调用这个合约的地方都要去修改。。。否则就是一个Error。

这集提供了一个解决方法,假设我们新的ServiceContract名字为IHelloServiceChanged,那么只需要修改他的ServiceContract特性的Name 属性,是不是很简单。代码如下:

    [ServiceContract(Name = "IHelloService")]
    public interface IHelloServiceChanged
    {
        [OperationContract]
        string GetMessage(string name);
    }
那为什么这样可行呢?
让我们来看一下两者的mex,通过地址栏里面输入 http://localhost:8080/mex
首先是原先的,我们搜索一下portType关键字,我们只截取关键的:
 

我们看到这里有个name属性,名字是IHelloService;

然后再看当合约接口的名字改成IHelloServiceChanged之后:

name变成了IHelloServiceChanged。

我们知道,客户端在添加服务引用,然后生成本地的代理类的时候,是通过解析服务提供的mex地址中的xml描述信息来执行的,所以,我们只要让这个name还是保持原来的名字,服务端任他变动都没有关系。

再来看看给ServiceContract 特性添加name属性之后的mex内容:

可知,name属性已变为我们定义的内容。

ServiceContract 特性用来定义类的名字,里面的OperationContract用来定义方法的名字,如果某天我们改变了方法的名字,又不想让客户端重新引用,只需要定义OperationContract的name属性。

第五集介绍完毕。

Thank you!

时间: 2024-10-18 07:29:32

年前辞职-WCF入门学习(5)的相关文章

年前辞职-WCF入门学习(1,2)

前言 周一的时候辞职了,离开了从12年毕业后8月份开始一直到现在的公司. 辞职之后当然是玩.玩了若干天的游戏,真的是没日没夜啊,但是玩的太坑,怒删游戏.话说上次玩还是在14年7月份.下次还是过年回家再和小伙伴一起玩.想到过年也就7天的假.... 21号驾照考试,考完22号去新公司报到. 新公司WCF用的比较多,以前纯粹站在了使用者的角度,自己是没写过,想到如果去了之后技能不过关,没过试用期就被fired了的话不太好. 优酷上找了一下,没有太好看的WCF教程,先不说内容,对我来说那种不是wuma

年前辞职-WCF入门学习(4)

前言 上一篇的学习中碰到一个问题,用地址http://localhost:8080/mex 访问元数据的时候一直提示400 bad request 错误,因为时间太晚了,查了好几遍代码,也没有发现问题.刚刚又试验了一下,解决方案分两步 ①用管理员方式运行vs, ② 将 <serviceMetadata httpGetEnabled="true" /> 改成 <serviceMetadata httpGetEnabled="true" httpGet

年前辞职-WCF入门学习(3)

前言 [2了,刚写好的,手贱,点了删除,还真TMD的删除了,只好重写] 今天周六,去同事家聚了一个餐,感觉各种豪华. 废话不多说,前两集大致介绍了一下什么是WCF以及和WCF相关的WebService和.net Remoting的一些东西,今天主角要上场,开始WCF的实现相关的东西. 第三集 Create a WCF Service 挂了vpn来看youtube的视频,感觉还是慢,算了,干脆下载了看. 这一集主要有以下四个点 创建一个WCF服务 用一个控制台程序来托管这个服务 提供两个Endpo

年前辞职-WCF入门学习(6)

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace EmployeeService 7 { 8 public class Employee 9 { 10 private int _id; 11 private string _name; 12 private bool _gender; 13 private DateTime _dat

年前辞职-WCF入门(6)

前言 昨天早上去医院做入职体检,被告知要预约,本以为是要排队,我连视频都准备好了...结果就回来了.下午去了新公司那边找房子,2了,因为公司提供了班车列表,我既然就只在班车所经过的几个地方找,却遗漏了公司附近这个重要的地址.最后找了一个“江景房”,上阳台就能看到钱塘江.价格和现在的比翻了一倍,累了,不想找了. 有朋友让我把标题前缀“年前辞职”4个字拿了,好吧,我承认,我就是靠这个吸引一部分眼球的. 第六集 WCF DataContract & DataMember (WCF的Data和DataM

菜鸟级别的WCF入门学习

这两天学习WCF,看了MSDN上的入门教程,和查找了一些网上给的例子,简单的实现了一下,感觉应该很适合我这种菜鸟级的选手看了. 1.新建一个项目--WCF--WCF服务应用程序 用的是MSDN上的加减乘除,所以在名称部分写的是Calculator 删除自带的Service1和IService1两个文件,右键添加--新建项 由于左侧的选项里没有WCF,所以直接搜索WCF,添加WCF服务,名字为Cal 删除或注释掉Cal里的 //public void DoWork() //{ //} ICal里的

WCF入门教程

无废话WCF入门教程一[什么是WCF] wcf问题有问必答,欢迎加群: 一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NET Framework 3.0 开始引入. WCF的最终目标是通过进程或不同的系统.通过本地网络或是通过Internet收发客户和服务之间的消息. WCF合并了Web服务..net Remoting.消息队列和Enterpris

WCF 入门(25,26,27,28)

前言 项目赶时间,工期紧,熬过这段时间应该就好了吧.希望如此. 今天把自己那部分写的差不多了,回来和小伙伴一起又看了一遍<夏洛特烦恼>,还挺好看的,明天继续加班,do it. 第25-28集 第25集讲的是如何用winform来host 一个WCF service. 第26集讲什么是windows 服务 第27集讲用windows 服务来host 一个WCF service. 第28集讲用windows 服务来host 一个WCF service的优缺点. 用console,winform 或

WCF入门简单教程(图文) VS2010版

在这个例子中我们将使用VS 2010 创建一个WCF服务,其中会了解 [DataContract] [ServiceContract] 等特性.  内置的 WCFSVCHost ,并使用"WCF测试客户端"来测试我们创建的服务. 注意下面的所有类.接口及方法都添加了public 的访问级别. 一,建立一个WCF服务库 创建一个WCF服务库项目 在解决方案中会自动为我们生成两个类文件"IService1.cs"和"Service1.cs". 这两个