博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wcf学习总结《上》
阅读量:6422 次
发布时间:2019-06-23

本文共 2576 字,大约阅读时间需要 8 分钟。

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

Wcf概述

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

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

服务端契约

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

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

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

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

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

服务端宿主

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

服务端配置

服务端的配置文件非常重要,尤其是端点的配置,我们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,如需转载请自行联系原作者

你可能感兴趣的文章
微信小程序教学第三章(含视频):小程序中级实战教程:列表篇-页面逻辑处理...
查看>>
页面间通信与数据共享解决方案简析
查看>>
Swift 中 Substrings 与 String
查看>>
作为一个开源软件的作者是一种什么样的感受?
查看>>
移动端适配知识你到底知多少
查看>>
TiDB 在 G7 的实践和未来
查看>>
重新认识javascript对象(三)——原型及原型链
查看>>
小学生学“数学”
查看>>
FastDFS蛋疼的集群和负载均衡(十七)之解决LVS+Keepalived遇到的问题
查看>>
深入剖析Redis系列(二) - Redis哨兵模式与高可用集群
查看>>
Android 用于校验集合参数的小封装
查看>>
iOS混合开发库(GICXMLLayout)七、JavaScript篇
查看>>
instrument 调试 无法指出问题代码 解决
查看>>
理解缓存
查看>>
BAT 经典算法笔试题 —— 磁盘多路归并排序
查看>>
Nginx限制带宽
查看>>
All Web Application Attack Techniques
查看>>
归档日志ORA-19809: 超出了恢复文件数的限制
查看>>
精品德国软件 UltraShredder 文件粉碎机
查看>>
PANDAS 数据合并与重塑(join/merge篇)
查看>>