首页 > 技术文章 > WCF中修改接口或步骤名称而不影响客户端程序

Alex80 2016-01-13 11:41 原文

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

 

 

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

 

运行宿主应用程序。

 

运行Web客户端中的网页。

 

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

24

 

现在,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客户端,输入内容,点击按钮,程序报错:

25

 

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

 

回到WCF接口,修改如下:

 

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

 

重新生成WCF所在类库。

 

再次运行宿主应用程序。

 

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

26

 

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

 

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

27

 

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

 

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

28

 

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

 

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

推荐阅读