WCF中修改接口或方法名称而不影响客户端程序

本篇接着"从Web Service和Remoting Service引出WCF服务"中有关WCF的部分。

运行宿主应用程序。

运行Web客户端中的网页。

输入内容,点击按钮,能获取到WCF所提供的服务。

现在,WCF的接口如下:

namespace HelloWcf
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IFirstWcf”。
    [ServiceContract]
    public interface IFirstWcf
    {
        [OperationContract]
        string GetMessage(string name);
    }
}

修改接口的名称。

namespace HelloWcf
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IFirstWcf”。
    [ServiceContract]
    public interface IFirstWcfChanged
    {
        [OperationContract]
        string GetMessage(string name);
    }
}

接着修改WCF接口实现类。

namespace HelloWcf
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“FirstWcf”。
    public class FirstWcf : IFirstWcfChanged
    {
        public string GetMessage(string name)
        {
            return "Hello " + name;
        }
    }
}

重新生成WCF所在的类库。

再修改宿主应用程序的配置文件,主要修改endpoint节点中的contract属性值。

......
<endpoint address="HelloWcf" binding="basicHttpBinding" contract="HelloWcf.IFirstWcfChanged"></endpoint>
<endpoint address="HelloWcf" binding="netTcpBinding" contract="HelloWcf.IFirstWcfChanged"></endpoint>
......

重新运行宿主程序。

重新运行Web客户端,输入内容,点击按钮,程序报错:

如果每次更改WCF服务,按照目前的情况,会影响到客户端的使用。为此,在WCF的ServiceContract中为我们准备了Name属性,通过此属性可以避免如上问题的发生。

回到WCF接口,修改如下:

namespace HelloWcf
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IFirstWcf”。
    [ServiceContract(Name = "IFirstWcf")]
    public interface IFirstWcfChanged
    {
        [OperationContract]
        string GetMessage(string name);
    }
}

重新生成WCF所在类库。

再次运行宿主应用程序。

再次运行Web客户端,输入内容,点击按钮。

为什么为ServiceContract增加了Name属性,就不会影响客户端呢?

打开WCF所在的基地址base address。

点击页面中"http://localhost:9090/?wsdl"这个链接。

打开的页面列举了WCF服务的元数据,从中,发现了wsdl:portType节点的name属性值是IFirstWcf。

也就是说,当我们在WCF接口中,通过ServiceContract的Name属性显式设定了值,实际上是设定了WCF元数据中wsdl:portType节点的name属性值。

总结:当我们希望WCF的接口名、方法名的修改不影响到客户端的使用,就可以通过Name属性显式为接口名、方法名规定一个名称。

WCF中修改接口或步骤名称而不影响客户端程序的更多相关文章

  1. WCF中修改接口或方法名称而不影响客户端程序

    本篇接着"从Web Service和Remoting Service引出WCF服务"中有关WCF的部分. 运行宿主应用程序. 运行Web客户端中的网页. 输入内容,点击按钮,能获取 ...

  2. 在Eclipse中修改web项目的名称

    在Eclipse中修改web项目的名称 一.误区: 单击要修改名称的项目上右键Refactor->Rename,然后修改成另外一个名称 (光这样是不够的,哪怕你再修改web.xml中的displ ...

  3. WCF服务显示的是服务器名称而不是IP地址...

    打开http://xx.xx.xx.xx:端口号/Service1.svc页面显示的服务地址为: http://xx_yy_server:端口号/Service1.svc?wsdl 是显示的服务器的名 ...

  4. Xcode中修改整个项目工程名称步骤

    1:首先选中项目WaterDropTest.xcodeproj文件后单击鼠标->输入我们要重新命名的工程名,然后会弹出一个对话框,点击rename按钮 2.xcode菜单中选->produ ...

  5. remap——ROS中修改订阅的节点名称

    跑数据集或者使用不同传感器时,难免会遇到需要修改topic名称的时候,此时可以有两种做法. 一.直接修改源码.如果有launch文件,则修改launch文件对应的topic 二.直接进行remap操作 ...

  6. 【Eclipse】Eclipse中修改项目的映射名称与端口

    1.正常部署(映射的名字为项目名字,端口为8080)

  7. 写出Hibernate中核心接口/类的名称,并描述他们各自的责任?

    Hibernate的核心接口一共有5个,分别为:Session.SessionFactory.Transaction.Query和 Configuration.这5个核心接口在任何开发中都会用到.通过 ...

  8. Word中怎样删除分节符而不影响前节页面设置

    在Word中,通过常规方法删除一个不需要的分节符时,会默认将分节符后面的页面设置带入前一节.比如,第一节是纵向排版,第二节是横向排版,当删除第二节的全部内容,包括二者之间的分节符之后,就会使得第一节的 ...

  9. WCF技术剖析之十一:异步操作在WCF中的应用(下篇)

    原文:WCF技术剖析之十一:异步操作在WCF中的应用(下篇) 说完了客户端的异步服务调用(参阅WCF技术剖析之十一:异步操作在WCF中的应用(上篇)),我们在来谈谈服务端如何通过异步的方式为服务提供实 ...

随机推荐

  1. 《C#入门典》

    这本书算是我读的第一本关于.NET的书. 上大学的时候,教我们课的老师经常给我们安利"Wrox红皮书",说这是程序员写给程序员的书,有很高的参考价值. 这本书的电子版,有1000多 ...

  2. windows phone 生产含logo的二维码

    这几天了解二维码了解的比较多,不过就是没深入了解.google了一下生产含logo二维码的思路,就是把logo给画到生成的二维码上,还是因为二维码的纠错能力足够好啊,用Graphics对图片进行操作? ...

  3. crontab环境变量问题

    今天设置linux定时任务时,python内调用的shell指令总执行失败,单独调用python脚本则无问题,考虑到是环境变量未生效引起. 故在执行crontab -e编辑配置文件时,将shell内执 ...

  4. 重新安装Ubuntu12.04

    重新安装Ubuntu12.04 之所以我重新安装Ubuntu,因为我第一次给根目录分配的空间过小,好像是20GB吧~结果编译Android的时候,编译了3个小时候直接中止掉了.郁闷.这个也告诉我们一定 ...

  5. 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法

    Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负. Dijkstra算法是贪婪算法的一个很好的例子.设置一顶点集合S,从源点s到集合中的顶点的最终最短路径 ...

  6. hdu 2079 选课时间

    hdu 2079 选课时间 题意:选的学分总和为n,并且学分为a的课有b种,总共有K(1<=k<=8)种学分不同的课,并且要选的学分最多为40:问选课方案有多少种?(学分相同的课即认为相同 ...

  7. Unity3d Shader开发(三)Pass(Fog )

    雾参数用于雾命令控制. 雾化是通过混合已生成的像素的颜色和基于到镜头的距离来确定的一个不变色来完成.雾化不会改变已经混合的像素的透明度值,只是改变RGB值. Syntax 语法 Fog { Fog C ...

  8. <四> jQuery 事件

    $(document).ready(function) 将函数绑定到文档的就绪事件(当文档完成加载时) $(selector).click(function) 触发或将函数绑定到被选元素的点击事件 $ ...

  9. mvc3.0中[ValidateInput(false)]失效的问题

    在asp.net mvc3.0中[ValidateInput(false)]特性失效了,只需要在网站根目录中的web.config中做如下配置即可: <system.web> <ht ...

  10. Automotive Security的一些资料和心得(6):AUTOSAR

    1.1 Introduction AUTOSAR(汽车开放系统架构)是一个开放的,标准化的汽车软件架构,由汽车制造商,供应商和开发工具共同开发.它联合了汽车OEM ,供应商和开发工具供应商,其目标是创 ...