WCF的知识点盘点(一)概念,配置,架构,协议栈,契约与wsdl

勇哥注:

此系列文章是梳理一下勇哥认为项目有用的WCF的知识点,读者须有WCF的开发经验。



(一)wcf的概念和定位


1. 历史进程

面向对象:解决代码维护性问题【设计模式】

面向组件:解决利用性问题[react,  html->一个个页面分成各个组件[es6 jsx, scss],让js成了一个面向对象的语言] 

面向服务:解决多系统互通问题【跨平台,跨语言】否则写的系统 ,不能被别的系统调用。



2。 概念

  SOA   Service Oriented Architecture  面向服务架构

  是一种思想


目前SOA还没有统一的定义,但是SOA具有系列的大家认可的特征,见贴子:
http://47.98.154.65/?id=2391


3。 目的

  解决IT企业的信息孤岛的问题

  一些历史遗留系统的互通问题


4。wcf在soa的定位

 见图1.1


5。 实现途径

  SebService标准:

         WSDL:公布元数据

         SOAP:简单对象访问协议[基于xml]

         XSD:将各自系统的强类型转成XSD规范进行互通  [xml序列化用的]

          例子:

              .net    System.String

              xsd     x:string

              java    Java.lang.String


一。三要素ABC

  Address      地址,你家的地址在哪? (服务地址)

  Binding       绑定,我该乘坐什么交通工具呢?  (服务通讯 【http,tcp,msmq,udp】)

  Contract      契约,去你 家做什么?  (服务边界)



wcf的发展历程和在soa中的定位,如下图:



image.png

(图1.1)



客户如何访问服务端,如下图所示:

1。服务端对外公开提供endPoint,endPoint包括ABC三要素,即地址、绑定、契约

2。客户端通过代理proxy,通过ABC,来访问服务端。

3。注意双向箭头,表示双方可以互相通信。


image.png


二. wcf的配置文件


   根结点: system.serviceModel

   service    对外的endpoint进行配置

   bindings   对所有的B进行配置(打开时间,关闭时间,传输时间。。。)

   behaviors  对影响wcf运行时的一些方法进行配置(服务线程数,服务实例,事务等)

        

   <baseAddress>  基地址

      <endpoint address="">  如果为空,则会使用baseAddress

      endpoint address= BaseAddress+endpoint address     也就是说可以组合在一起用



    <behaiviors>

        <serviceBehaviors>

            <behavior>

                  <!-- 为避免泄露元数据信息,请在部署前将以下设置为false --!>

                  <serviceMetadata httpGetEnabled="true"  httpGetEnabled="true">

                  <serviceDebug includeExceptionDetailInFaults="false">



配置文件的优缺点:

1。 只修改配置,不用改程序

2。 wcf集群增加到多台的时候,不能集中设置


解决方案是:

       1。 能写入代码的配置(固定不变的)就写入代码

       2。config中心化

             有zookeeper, apollo [https://github.com/ctripcorp/apollo/wiki/Quick-Start]  国产开源



三. wcf的架构组成


image.png

服务运行时:

限制行为,错误行为,元数据行为,

实例行为  (app.config中的behaiviors配置的就是实例行为)

参数筛选


协定:

数据协定 (对xsd的操作)

消息协定   (对message的协定)

服务协定     (对契约的特性 ServiceContract)

策略与绑定



四. wcf程序的运行原理示意图:


image.png

binding对象是一个协议栈

每一种binding对象的协议栈数量是不同的。

下图是在监视窗口中查看的NetTcpBinding和BasicHttpBinding的协议栈:


对于NetTcpBinding:

底层transport是  tcp传输

security是 支持的

Encoding是 二进制方式

上层Transaction是  事务流

image.png



(五)端口共享

端口共享在wcf中的意义?

由于防火墙一般只开放少数端口以防止网络攻击。所以必须使用端口共享。

对于Internet和本地网的通讯,防火墙一般只保留80|443端口,以保证http和https。

通过iis寄宿方式则可以实现端口的共享,但是仅限于寄宿iis,如果是自我寄宿的方式,80|443是不可用的。

对于tcp,通过Net.TCP Port Sharing Service,可以实现端口共享。

见《WCF技术剖析》第2章  2.2端口共享



(六)服务契约,操作契约


  [ServiceContract,OperationContract]


image.png


使用: 用于定义服务边界,也就是定制wsdl。


wsdl可以找到的东西:

1. 服务地址  soap:address

    .net中由svcutil 来解析


2. 传输协议  soap.binding   [http://schemas.xmlsoap.org/soap/http(tcp)]


3. 绑定类型  BasicHttpBinding


4. Operation和message的对应关系 (一对一,一对二)


契约的三种模式:

1. rpc模式 (input, output)

    请求响应,默认的模式。

    对应关系:

    从wsdl中可以看到,一个operation对应着两条message的action

    <wsdl:operation name="DoWork">

          <wsdl:input message=tns:IHomeService_DoWork_InputMessage" wsaw:Action=“”>

          

2. 单向模式(isOneWay [在线(online)与离线(offline)])


    场景:不需要service响应,适合不需要等待结果的业务场景。

     fiddler监控: HTTP/1.1 202 Accepted, 了解http 202状态码

    


3. 双向通讯[发布订阅]



契约的特性的参数:

1. 修改ServiceContract的Name和Namespace

2. 修改OperationContract的Name和ReplyAction


 




本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-06-24 07:59:26 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864