专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > WCF

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

发布时间:2011-06-23 13:51:14 文章来源:www.iduyao.cn 采编人员:星星草
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属性显式为接口名、方法名规定一个名称。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: