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中修改接口或方法名称而不影响客户端程序的更多相关文章
- WCF中修改接口或步骤名称而不影响客户端程序
WCF中修改接口或方法名称而不影响客户端程序 本篇接着"从Web Service和Remoting Service引出WCF服务"中有关WCF的部分. 运行宿主应用程序. 运行We ...
- 在Eclipse中修改web项目的名称
在Eclipse中修改web项目的名称 一.误区: 单击要修改名称的项目上右键Refactor->Rename,然后修改成另外一个名称 (光这样是不够的,哪怕你再修改web.xml中的displ ...
- java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)
interface接口参数 jdk1.7及以前使用spring功能实现的: 注意: 1.该功能只能获取类的方法的参数名,不能获取接口的方法的参数名. public static void test() ...
- Centos7中修改Hostname的方法
一.Centos7中修改的方法: hostnamectl set-hostname <new hostname> 说明:centOS 7 里面修改hostname的方式有所改变,修改/et ...
- WCF服务显示的是服务器名称而不是IP地址...
打开http://xx.xx.xx.xx:端口号/Service1.svc页面显示的服务地址为: http://xx_yy_server:端口号/Service1.svc?wsdl 是显示的服务器的名 ...
- Android中定义接口的方法
1.接口方法用于回调(这里定义接口是为了使用其接口方法): public interface ICallback { public void func(); } public class Caller ...
- ionic2+中修改minSdkVersion的方法
具体方法很简单,直接在config.xml中找到下面这一行 <preference name="android-minSdkVersion" value="17&q ...
- remap——ROS中修改订阅的节点名称
跑数据集或者使用不同传感器时,难免会遇到需要修改topic名称的时候,此时可以有两种做法. 一.直接修改源码.如果有launch文件,则修改launch文件对应的topic 二.直接进行remap操作 ...
- 【Eclipse】Eclipse中修改项目的映射名称与端口
1.正常部署(映射的名字为项目名字,端口为8080)
随机推荐
- free命令中的buffer和cached的比较(转)
原文链接:https://www.jianshu.com/p/cd2dd59d1566 最近在搞监控,突然看到我系统的内存要用完了,赶紧登录服务器看看, ~]# dstat -m 16G内存就 ...
- Android工程方法数超过65535的解决办法
Error:Execution failed for task ':ttt:transformClassesWithDexForDebug'.com.android.build.api.transfo ...
- tensorflow variable的保存和修改(加载一部分variable到新的model中)
link: https://www.tensorflow.org/guide/saved_model 中文博客:https://blog.csdn.net/Searching_Bird/article ...
- 局域网搭建https局域网
局域网搭建https局域网 1.使用tomcat作为服务器搭建局域网访问https 需要使用java jdk\bin下的keytool.exe来创建证书 使用命令:keytool -genkenpai ...
- 今天我碰到了由于web.xml文件表头信息导致润乾报表启动失败的问题,解决方案如下
下面是从2.3,2.4.2.5 3.0集中版本的web.xml头信息的细节,当发现系统启动不报错但是该生成的功能没有正常生成,特别是在这次配置润乾报表的时候发现用2.4版本的时候,在web.xml中配 ...
- tab切换webuploader失效的解决方法
<script type="text/javascript"> $(document).ready(function () { $('#tt').tabs({ bord ...
- pyqt5-组件
组件(widgets)是构建一个应用的基础模块.PyQt5有广泛的各式各样的组件,包含:复选按钮(QCheckBox),切换按钮(ToggleButton),滑块条(QSlider),进度条(Prog ...
- Online DDL工具的安装与使用
最近经常在线上经常遇到有性能问题的SQL,有些表没有合理添加索引,有些表添加的索引不合理,各种各样的问题,导致SQL的执行效率不高.这时DBA们不得不重构SQL,使其达到最好的性能,这时我们往往要在线 ...
- Hanoi Factorys
题面 思路 这道题看似难的一匹,实际上也难的一批还好,甚至n^2 DP都有50分呢. 原谅我一失手成千古恨. 50分思路 就是sort后根据条件DP if (LIS[i].b>LIS[j].a) ...
- Ubuntu 下 vi 输入方向键会变成 ABCD 的解决方法
Ubuntu 下 vi 输入方向键会变成 ABCD,这是 Ubuntu 预装的是 vim tiny 版本,安装 vim full 版本即可解决. 先卸载vim-tiny: $ sudo apt-get ...