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,在接口类中(对客户端开发并可以调用的类型),在接口该类中,定义一个字段并赋默认值

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

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

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

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

原文地址:https://www.cnblogs.com/DamonTang/p/2409197.html