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. lambda表达式————一看就会

    这里没有过多讲解,只有几个连接,进入看,看完后你就会觉得什么博客对lambda的介绍都是浮云,不是片面就是不准确. 链接地址: 1: https://msdn.microsoft.com/en-us/ ...

  2. 九度OJ 1366 栈的压入、弹出序列 【数据结构】

    题目地址:http://ac.jobdu.com/problem.php?pid=1366 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的 ...

  3. 火狐flash插件

    1.解压缩文件: tar -xzvf ***.tar.gz 会解出一个文件:libflashplayer.so 和一个目录 usr 2.将文件libflashplayer.so 拷贝到目录   /us ...

  4. json 包含字段及函数的写法

    在javascript中写类有多种方式: 1.function()中嵌套function; 2.prototype的方式 ,3.json的方式,如下: <script language=&quo ...

  5. 原生js在IE7下 向dom添加节点的一个bug, (本例为添加hidden input)

    需求是要用js向dom结构增加1个hidden用来存放要post到服务器的数据 var aspnetForm = document.getElementById("aspnetForm&qu ...

  6. 将TIBCO Host 实例注册为Windows服务

    安装了TIBCO ActiveMatrix BPM及成功创建了ActiveMatrix Administrator 和 BPM Server后,每次都要手动启动tibcohost,比较麻烦,实际上TI ...

  7. eclipse中使用jython

    通过maven配置加载这个包,目前比较稳定的是python2.7的,见 <dependency> <groupId>org.python</groupId> < ...

  8. 一步步学习NHibernate(8)——HQL查询(2)

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,老魏带着大家学习了HQL语句,发现HQL语句还是非常不错的,尤其是在懒加载的时候,书写起来比较的舒服,但是这里老魏 ...

  9. 如何让listview列表为空时显示提示

    先在布局文件中声明一个TextView,再设置listview.setEmptyView(TextView).这样当listview中的数据为空时就会列表的位置就会显示textviw中的提示.

  10. IndexedDB 增删改查 简单的库

    <!DOCTYPE html> <html> <head> <title></title> <script src="Ind ...