码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-11 16:17:50      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

 

 

本篇接着"从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中修改接口或方法名称而不影响客户端程序

标签:

原文地址:http://www.cnblogs.com/darrenji/p/4638695.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!