当前位置: 首页 > news >正文

wcf学习总结《上》

在最近快一个月的时间里我重新系统地学习了wcf,结合着IIS项目和自己写的一些小测试对wcf原理理解又加深了一层。在这里希望与大家分享一下我的wcf学习总结。下面我主要从这几个方面:wcf概述、服务端契约、服务端宿主、服务端配置、客户端配置、数字证书来讲解分析。这次先讲解,wcf概述、服务端契约、服务端宿主、服务端配置。

Wcf概述

Wcf(Windows Communication Foundation)Microsoft为构建面向服务的应用程序而提供的统一编程模型,它整合.NET平台下所有和分布式系统有关的技术。Wcf本质是面向服务的主要分为服务端和客户端两部分。服务端和客户端进行通信的过程如下图所示:


205146468.png


上图中,主机进程就是服务端,在其中需要创建服务,然后将服务通过EndPoint(终结点)与客户端进行通信。客户端在使用服务时,需要首先创建一个代理服务,然后调用这个代理服务。EndPoint(终结点)在wcf中是非常重要的部分。它包含了服务地址(Address)、绑定格式(Bimding)和契约(Contract)。其中,地址定义了服务位置,绑定定义了服务通信方式,契约定义了服务所提供的功能。详细说来就是,wcf服务最终目标是通过进程或不同系统、通过本地网络或通过Internet收发客户和服务之间的消息。如果需要以独立于平台的方式尽快收到消息,就应这么做。服务提供一个端点,它用契约、绑定和地址来描述。契约定义了服务提供的操作,绑定给定了协议和编码信息,地址是服务的位置。客户需要一个兼容的端点访问服务。客户调用代理上的一个方法。代理提供了服务定义的方法,但把方法调用转换为一条消息,并把该消息传输到信道上。信道有一个客户端和一个服务端,它们通过一个网络协议来通信。在信道上,把消息传递给调度程序,调度程序再把消息转换为服务调用的方法调用。

服务端契约

契约定义了服务提供的功能和客户端可以使用的功能。契约可以完全独立于服务的实现代码。有wcf定义的契约可以分为3种不同的类型:数据契约、服务契约和消息契约。契约可以用.NET属性来指定:

数据契约:数据契约定义了从服务中可以接受和返回的数据。用于收发消息的类关联了数据契约属性。

服务契约:服务契约用于定义描述了服务的WSDL。这个契约用接口或类定义。

消息契约:如果需要完全控制SOAP消息,消息契约就可以指定应放在SOAP标题中的数据以及放在SOAP正文中的数据。

我们IIS项目中主要用了服务契约,主要定义了IFTPService.csIServerService.csIWebsiteService.cs三方面的服务契约,它们都是接口类型,而FTPService.csServerService.csWebsiteService.cs分别是这三方面的服务实现类。


205253797.png


服务端宿主

使用WCF可以在任意宿主上运行服务。可以为对等服务创建一个Windows窗体或WPF应用程序,或创建一个Windows服务,或用WAS存放该服务。控制台也适合于演示简单的主机。而我们IIS项目是运用Windows服务作为宿主,与原先项目运用webservice技术有更好的优点,服务端运用Windows服务作为宿主后可以摆脱对计算机IIS的依赖,客户端没有安装iis时,同样可以在客户端对一些服务器、ftp做操控。如下图IIS项目刚开始做服务的项目:

205351412.png


服务端配置

服务端的配置文件非常重要,尤其是端点的配置,我们IIS项目的配置文件如下图所示(service节点中定义了地址、绑定、契约):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<services>
       <service name= "IISCompanion.WCFService.ServerService"  behaviorConfiguration= "httpBehavior" >
         <endpoint address= "http://218.196.204.59:8091/ServerService"  binding= "wsHttpBinding"  contract= "IISCompanion.WCFService.IServerService"  bindingConfiguration= "httpBinding" >
           <identity>
             <dns value= "IISCompanionWCFCert"  />
           </identity>
         </endpoint>
       </service>
       <service name= "IISCompanion.WCFService.WebSiteService"   behaviorConfiguration= "httpBehavior" >
         <endpoint address= "http://218.196.204.59:8091/WebSiteService"  binding= "wsHttpBinding"  contract= "IISCompanion.WCFService.IWebSiteService"  bindingConfiguration= "httpBinding" >
           <identity>
             <dns value= "IISCompanionWCFCert"  />
           </identity>
         </endpoint>
       </service>
       <service name= "IISCompanion.WCFService.FTPService"  behaviorConfiguration= "httpBehavior" >
         <endpoint address= "http://218.196.204.59:8091/FTPService"  binding= "wsHttpBinding"  contract= "IISCompanion.WCFService.IFTPService"  bindingConfiguration= "httpBinding" >




本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/1218445,如需转载请自行联系原作者

相关文章:

  • Oracle exp/imp,备份或导入时注意的事项
  • IDEA常用快捷键[转]
  • ABR上配置OSPF区域间路由汇总
  • J-Scope的使用
  • oracle kill所有plsql developer进程
  • 《编程之美》
  • squid反向代理基本概述及性能事项
  • 自定义事件
  • 基因大数据分析的云计算实践
  • 推荐2个网站特效的网址
  • 【最新】2015年7月之15个最新jQuery插件
  • VS“.NET研究”2010测试功能之旅:编码的UI测试(1)
  • Json拼接字符串必须用双引号
  • 浅谈C#中的延迟加载“.NET研究”(1)——善用委托
  • App-V 4.6 SP1系列之一安装
  • 「译」Node.js Streams 基础
  • chrome扩展demo1-小时钟
  • download使用浅析
  • JavaScript的使用你知道几种?(上)
  • ng6--错误信息小结(持续更新)
  • Promise面试题,控制异步流程
  • React 快速上手 - 07 前端路由 react-router
  • vue的全局变量和全局拦截请求器
  • 第十八天-企业应用架构模式-基本模式
  • 复习Javascript专题(四):js中的深浅拷贝
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 我有几个粽子,和一个故事
  • 写给高年级小学生看的《Bash 指南》
  • 一道闭包题引发的思考
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​学习一下,什么是预包装食品?​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (1)虚拟机的安装与使用,linux系统安装
  • (poj1.2.1)1970(筛选法模拟)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)Linux——Linux常用指令
  • (规划)24届春招和25届暑假实习路线准备规划
  • (一)Neo4j下载安装以及初次使用
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (轉貼) UML中文FAQ (OO) (UML)
  • ******之网络***——物理***
  • .form文件_一篇文章学会文件上传
  • .Net - 类的介绍
  • .net CHARTING图表控件下载地址
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .Net Core 中间件验签
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET企业级应用架构设计系列之开场白
  • .skip() 和 .only() 的使用
  • @Autowired 与@Resource的区别