前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >年前辞职-WCF入门学习(5)

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

作者头像
_淡定_
发布2018-08-24 11:11:04
1630
发布2018-08-24 11:11:04
举报
文章被收录于专栏:dotnet & javadotnet & java

前言

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

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

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

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

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

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

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

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

QQ截图20150111211248
QQ截图20150111211248

name变成了IHelloServiceChanged。

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

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

QQ截图20150111211649
QQ截图20150111211649

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

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

第五集介绍完毕。

Thank you!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-01-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 第五集 How to make changes to WCF service without breaking clients (在不修改客户端的情况下更新WCF服务)
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档