zoukankan      html  css  js  c++  java
  • WCF(学习笔记)【参见WCF教程】

     WCF:基于SOA(面向服务编程 )的一个.net框架产品   一种分布式通讯的统一模型(分布式通讯就是对多种 操作系统和平台的的兼容) 通信范围比较广

      Web service             .net Remoting

    其他           WCF      其他

       定义一个wcf服务后  它会对外发布一个

      端点  协议  绑定

      宿主程序:asp.net  exe  wpf   window  forms......

    WCF可以支持的协议:TCP  HTTP  跨进程   自定义协议

     在WCF框架下  开发基于SOA的分布式系统

        .net Remoting  :能够高性能的实现.net 和.NET之间的通讯   受语言限制,     Web Service:基于SOAP(协议), 可以跨平台调用:

            WCF 是面向服务的产品 ,

     那么WCF也是基于SOAP的通讯机制 ,这保证了系统之间的互操作性

             WCF最重要的是能够快捷的额创建一个服务,    WCF 包括三部分:

     1,Service Class :一个标记了[ServiceContract]Attribute的类[契约标签]

       [ServiceContract]  [OperationConstract] 服务契约

       [DataContract]  [DataMember]  数据契约

     2,Host(宿主):可以使应用程序  它是WCF Service运行的环境

     也就是说  服务器上(的程序)

     3,Endpoints:可以使一个 也可以是一组  wcf实现通讯的核心要素

     WCF 由一组Endpoints集合组成  每个endpoint就是用于通信的入口 

      客 服 通过endpoint交换信息

      

        一个endpoint(端点) 由三部分组成  :      (where)address(地址):是endpoint的网络地址 它标记了消息发送的目的地 

       (what)  contract (契约):描述消息包含的内容  以及消息的组织和操作方式

      (how) Binding  (绑定):描述如何发送消息  ,例如消息发送的传输协议(如TCP,HTTP)  安全(如ssl,soap消息安全) 

      opration操作

          那么WCF是怎样通讯的呢????

      WCF管理的是服务端和客户端的通信  

       对于服务端  WCF提供了类ServiceDescription用于描述一个WCF Service

       对于客户端  WCF管理的是发送消息 时 需要使用到得通道Channel,        类channelDescription描述了这样一个通道

    ServiceDescription           Service Type           ISerciceBehavor            ServiceEndpoint                  EndpointAddress                  Binding                  ContractDescription

               下面要写一个wcf的程序  首先要添加引用  system.ServiceModel

    一般我们要定义wcf服务时 先把一个接口定义为一个服务  这样为了更好的面向对象(服务)编程   在接口中添加[ServiceContract] [OperationContract] [DataContract] [DataMember]

    在实现接口类中就不需要 在添加标签啦           

       接下来:一个WCF Service 必须有host作为它的运行环境 ,这个host可以是

      ASP.NET  Windows Service  不通的应用程序  例如控制台程序

        host实现

               using System.ServiceModel

                //创建一个SerciceHost对象   参数(服务实现类的类型typeof,url对象)

       ServiceHost host =new ServiceHost(typeof(MyMethod),new Url("http://localhost:8080/HelloService"));

    新建两个项目  一:wcf服务应用程序 服务端 二:控制台   客户端

     服务端:接口  服务契约:标签

    1,ServiceContract    声明接口或类在客户端可见  2,OperationContract   声明具体的方法在客户端可见

       数据契约:标签

    1,DataContract    把某个类或结构声明为数据契约  ,这个类就可以再客户端可见并可用来声明变量

    2, DataMember      把服务端类中的变量  字段 标记为在客户端可见

      

             客户端:

     在客户端 控制台程序中      添加服务引用 

       在  发现 中会去寻找可用的服务

     在最下面会有服务引用的命名空间  ServiceReference1

           在客户端调用服务    1,定义通信管道 client  就是通过它来调用服务端提供的方法的

       ServiceReference1.ServiclClient  client =new ServiceReference1.ServiclClient ();

        client.studentlClass();

    2,服务端提供给客户端使用的类

      ServiceReference1.student1(服务端的类) stu==

       问题:

       1,要想在客户端使用服务端里自定义的类型,除了用 [DataContract]声明之外 还要有一个服务契约(方法)[OperationContract]的返回值是这个类型的。    2,在接口类中(对客户端开发并可以调用的类型),在接口该类中,定义一个字段并赋默认值

      定义一个属性并给它赋默认值 

       那么在客户端调用时  输出该类中的属性值 

       为空      默认值丢失???????

     序列化的问题??????     

  • 相关阅读:
    Jenkins 集成Sonar scanner的使用案例
    Sonarqube 安装 及与Jenkins sonar scanner插件集成部署
    shell if 判断匹配1位数字
    使用tcpdump抓包
    golang + snap7 对西门子plc进行读写
    python基础练习题(题目 求输入数字的平方,如果平方运算后小于 50 则退出)
    python基础练习题(题目 统计 1 到 100 之和)
    python基础练习题(题目 使用lambda来创建匿名函数。)
    微服务状态之python巡查脚本开发
    python基础练习题(题目 计算两个矩阵相加)
  • 原文地址:https://www.cnblogs.com/DamonTang/p/2409197.html
Copyright © 2011-2022 走看看