通常我们去大保健的时候,都会找姑娘问一下这里能提供什么服务,什么价格,这时候可能姑娘会跟你口述一些服务或者提供一份服务清单,这样的话大

家就可以做到童嫂无欺,这样一份活生生的例子,在wcf中同样是一个道理,只有client了解service能提供哪些功能,client才可以根据server提供的功能进行

消费,那问题来了,service怎么把功能提供给client进行选择呢???这个就是我这一篇要聊的wsdl(web service description language)。。。

一:wsdl

   现在你已经知道了,wsdl就是server提供给client的清单,那下面问题就来了。server是如何提供的呢???你要是比较仔细的话,可能会知道我在上一

篇提到的一个endpoint,如下截图。

在上面这幅图中,你可以看到,Homeservice提供了两个端点,一个是“服务端点“,一个是“元数据端点”。并且你也看到了,元数据的端点地址是

http://192.168.16.16:19200/mex,当client通过svcutil访问这个地址的时候,就拿到了server能提供的功能清单,然后client就可以根据这些功能生成一

个代理文件,然后的然后,就是你懂得,各种啪啪啪,XXXClient。

二:眼见为实

1.见证wsdl

 要想看见wsdl,你只需要通过http://localhost:19200打开服务地址、如下图:

然后点击:http://localhost:19200/?singleWsdl

现在你看到的就是server功能清单,太tmd的重量级了,已经完完全全果体在世人前了,下一小节我们再详细的分析下。

2. 见证client端的XXXclient

  刚才我也说了,当你用vs做“服务引用”的时候,svcutil会根据http://localhost:19200/mex的地址来查看wsdl,然后生成代理,下面我们具体来看一下。

点击确定之后,我们就可以看到在 Service References 文件夹下面生成了一个Reference.cs 文件。

然后我们打开Reference.cs,就可以看到一个继承于ClientBase的HomeServiceClient。

三:详细分析wsdl文件

  学wcf,你一定要像svcutil一样能够看得懂wsdl。

1. 首先看下server提供了一个Update操作,参数是一个id,一个Student这个自定义的复杂类型,同时返回也是Student这个

复杂类型。

1 namespace MyService
2 {
3     [ServiceContract]
4     public interface IHomeService
5     {
6         [OperationContract]
7         Student Update(int id, Student stu);
8     }
9 }

2. wsdl这个xml文件,刚才你也看到了,下面我们一个个节点看看

<1> portType 和 operation节点

  当你看到下面的截图后,我想你也能猜的出来,portType就是契约(IHomeService),operation就是契约方法(Update),不过有点意思的是,在operation

下面你看到了一个input,一个output,这个就是所谓的 ”输入消息“,”输出消息”,那是什么意思呢??? 也就是说client到server的消息叫做“输入消息”,server到

client端叫做“输出消息”,到这里你应该似乎明白了,我C#中的Update方法是有入参和出参的,然而这映射到wsdl中就是两条消息,input和output,这个也就是经典

的“请求-响应“模式。

好了,继续往下看,在wsdl:input和wsdl:output中分别有一个Action属性,这个非常有意思,wcf的底层就是通过这个地址来找到对应的方法,比如我们看到的代理

类中的Update方法上面就有这么一段。

<2> message 和 types节点

  继续往下看的话,你会发现input和output中还有一个message属性,对应的为IHomeService_Update_InputMessage和IHomeService_Update_OutputMessage,

这个正好是message节点的引用,如下图:

从这个图中,你可以看到input和output下面都有一个wsdl:part节点,这个就是表明input和output中需要携带的参数,比如element="tns:Update",就引用了

element中Name=Update的节点,如下图:

好了,最后我再截一张图,可以看到,传输协议为soap,服务地址等等。。。然后就没什么好说的了。

转载于:https://www.cnblogs.com/huangxincheng/p/4567822.html

十五天精通WCF——第三天 client如何知道server提供的功能清单相关推荐

  1. 十五天精通WCF——第五天 你需要了解的三个小技巧

    十五天精通WCF--第五天 你需要了解的三个小技巧 原文: 十五天精通WCF--第五天 你需要了解的三个小技巧 一: 服务是端点的集合 当你在开发wcf的时候,你或许已经注意到了一个service可以 ...

  2. 十五天精通WCF——第六天 你必须要了解的3种通信模式

    十五天精通WCF--第六天 你必须要了解的3种通信模式 原文:十五天精通WCF--第六天 你必须要了解的3种通信模式 wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦 ...

  3. 十五天精通WCF——第七天 Close和Abort到底该怎么用才对得起观众

    原文:十五天精通WCF--第七天 Close和Abort到底该怎么用才对得起观众 一:文起缘由 写这一篇的目的源自于最近看同事在写wcf的时候,用特别感觉繁琐而且云里雾里的嵌套try catch来防止 ...

  4. 十五天精通WCF——第十四天 一起聊聊FaultException

    原文:十五天精通WCF--第十四天 一起聊聊FaultException  我们在玩web编程的时候,可能你会不经意的见到一些http500的错误,我想你应该不会陌生的,原因你应该也知道,服务器异常嘛 ...

  5. 十五天精通WCF——第十三天 用WCF来玩Rest

    在我们玩wcf的时候,都会潜意识的觉得wcf就是通过soap协议交换消息的,并且可以在basic,tcp,msmq等等绑定中任意切换, 牛逼的一塌糊涂,但是呢,如果说哪一天wcf不再使用soap协议, ...

  6. 十五天精通WCF——第八天 对“绑定”的最后一点理解

    转眼已经中断10几天没有写博客了,也不是工作太忙,正好碰到了端午节,然后最近看天津台的爱情保卫战入迷了...太好看了,一直都是回味无穷...而且 涂磊老师话说的真是tmd的经典,然后就这样耽搁了,好了 ...

  7. 十五天精通WCF——第十一天 如何对wcf进行全程监控

    说点题外话,我们在玩asp.net的时候,都知道有一个叼毛玩意叫做"生命周期",我们可以用httpmodule在先于页面的page_load中 做一些拦截,这样做的好处有很多,比如 ...

  8. 十五天精通WCF——第十二天 说说wcf中的那几种序列化

    转自:https://www.cnblogs.com/huangxincheng/p/4660251.html 我们都知道wcf是由信道栈组成的,在我们传输的参数走到传输信道层之前,先需要经过序列化的 ...

  9. [系统安全] 四十五.APT系列(10)Metasploit后渗透技术信息收集、权限提权和功能模块详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

最新文章

  1. C#里面Console.Write与Console.WriteLine有什么区别????
  2. CentOS 7安装Zabbix 3.4
  3. 详解CSS的相对定位和绝对定位
  4. php 自动寻路算法,PHP树-不需要递归的实现方法
  5. 取出字符串strName前4个汉字
  6. .net语言_小白对入门语言的选择,C、C++、Java、Python、.NET该怎么选?
  7. 51单片机 | 基于I2C总线的秒表模拟应用
  8. 程序员面试被问到“三次握手,四次挥手”怎么办?
  9. .Net Core之初识及WebApi的简单使用和发布
  10. linux安装vlan管理软件,Linux_Linux下配置vlan网卡教程,1.需要使用到vconfig软件。首先y - phpStudy...
  11. 流程图里的形状符号的代表意义
  12. 付款方对接银联入网仿真测试系统
  13. 魔百盒B863AV3.2-M,B863AV3.1-M2线刷+卡刷精简固件(S905L3A-B)
  14. python函数详细讲解_小白必看的Python函数讲解
  15. 自动复制吱口令html,使用clipboard.js实现复制吱口令功能的示例代码
  16. 克服低温磁场测量的挑战—高斯计
  17. 软件测试流程规范简介(不同公司流程规范不一样,仅供参考)
  18. 运行的程序总是莫名被 Killed
  19. 组织过程管理,项目管理过程
  20. nfcwriter下载 ios_龙族幻想全球iOS收入第8,闪耀暖暖跻身国内收入Top 10丨App Annie 8月指数...

热门文章

  1. 设置select下拉框不可修改的→“四”←种方法
  2. Linux(CentOS6.5)中安装maven
  3. 更改Jenkins升级站点
  4. 彻底解决tensorflow:ImportError: Could not find 'cudart64_90.dll' tensorflow安装
  5. 本机无法访问虚拟机上的nignx
  6. 华为不造车,广汽合作智能驾驶
  7. CVD-ALD前驱体材料
  8. PaddlePaddle推理部署
  9. AIoT 2020 年分析
  10. Pytorch和CNN图像分类