WCF基础

 

 

在了解了WCF的概念和通信原理,以及为什么要使用WCF之后,就能够明白WCF在现在的应用程序开发中所起到的作用,

WCF能够实现不同技术和平台之间的安全性、可依赖性和用户操作性的实现,对大型应用程序开发起到促进作用。

 

 

、服务

 

     服务是一组公开的功能的集合。在软件开发领域,从传统的面向过程,到面向对象,然后历经了面向组件的开发

一致发展到当今的面向服务开发。


 

1WCF服务

面向服务开发也并不是什么新技术,面向服务开发只是之前的面向过程、面向对象、组件开发和面向服务开发一种补充。

面向服务开发有如下优点:


 重用性:  面向服务的开发提升了应用程序的重用性,通过创建可用于服务的接口能够实现不同应用程序中使用相同或

           类似程序实现的代码。

 注重效率:面向服务的开发可以使用现有的服务的集合,这样能够让开发人员能够快速的进行数据交换和开发,

           而无需关注底层服务的实现。

 松耦合:  面向服务的应用程序是独立于服务执行环境的应用程序,这样就让应用程序成为一个松耦合的应用。

 职责划分:通过使用面向服务的开发能够进行职责的划分,例如经理和业务人员只需关心业务和统计数据即可,

           开发人员能够关注应用程序的开发。


一个面向服务的应用程序会将众多的服务集成到一起,形成单个逻辑单元,如图所示。

面向服务的应用

 

 

    WCF中的服务可以是本地的,也可以使用远程的服务。对于客户端而言,客户端只需要通过使用服务来实现应用程序功能,

这些客户端也可以是不同的类型,包括Windows应用程序,ASP.NET应用程序甚至是移动终端。

    对于客户端而言,客户端是通过使用消息与服务器进行通信。消息可以直接在客户端与服务之间进行传递,

也可以通过中间方进行传递。在服务器和客户端之间的消息是通过SOAP进行通信的,SOAPWeb应用开发中不同的是,

Web应用通常需要某个具体的协议进行相应功能的实现,例如HTTPFTP协议等,而在WCF中,WCF服务可以在不同的协议

中进行传递,并不局限于某个协议。正是因为如此,客户端与服务器之间的要求往往不是必须的,这也就是说,WCF客户端

可以与一个非WCF服务器进行信息通信,而一个非WCF客户端也可以与一个WCF服务器进行信息通信。

    为了保障WCF服务器的安全性,WCF服务器不允许直接对服务的调用。对于WCF客户端,只允许使用代理(Proxy

将调用信息转发给服务器。代理向客户端公开的操作和服务器端的操作相同。


2.服务的执行边界


    WCF能够让客户端跨越执行边界与WCF服务进行通信,WCF客户端和WCF服务器进行通信必须使用带来与服务进行通信,

即使是与本地服务进行通信,如图wcf与本机服务进行通信所示。

    wcf与本机服务进行通信展示了WCF客户与本机服务进行通信,WCF不仅能够支持不同应用程序域之间的服务的访问,

也能够支持不同进程之间的服务的访问。这就让WCF客户端可以调用一个应用程序中的服务,也可以调用不同应用程序

甚至不同进程中的WCF服务。不仅如此,WCF还支持客户端对远程计算机的中服务的调用,在远程服务调用中,WCF允许

客户端可以跨越IntranetInternet边界进行远程服务的访问和调用,如图wcf与远程服务进行通信所示。



wcf与本机服务进行通信

 

wcf与远程服务进行通信

 

    图wcf与远程服务进行通信展示了WCF客户端与远程服务进行通信,无论WCF客户端是与远程服务进行通信还是

与本地进程进行通信,都需要使用代理。


二、地址


    在Internet中,为了标识每个计算机,就需要使用IP进行地址划分,在生活中也有此实例,例如每个家庭都有一个门牌号,

为了方便找到某个人,则必须通过门牌号找到这个人,同样对于WCF服务而言,每个WCF服务都有一个自己的地址。

1WCF地址

    WCF地址包含两个元素,服务位置与传输协议,服务位置包括目标机器名、站点或网络、通信端口、管道或队列,

以及一个可选的特定路径或者URIWCF地址也可以是用于服务通信的传输样式。WCF支持的传输样式包括:

 HTTP:超文本传输协议。

 TCP:传输控制协议。

 Peer network:对等网。

 IPC:基于命名管道的内部进程通信协议。

 MSMQ:微软消息队列。


地址通常通过[基地址]/[可选的URI]的格式进行WCF地址描述,示例地址如下所示。

http://localhost:8731

http://localhost:8731/18-2

net.tcp://localhost:8731/server/18-2

net.pipe://localhost/18-2

net.msmq://localhost/18-2

其中关于http://localhost:8731这个地址可以称作使用http协议,访问计算机为localhost的端口8731正在等待客户端的调用。

而对于http://localhost:8731/18-2这个地址可以称作使用http协议,访问计算机为loacalhost的端口为873118-2服务

正在等待客户端的调用。


2TCP地址

TCP地址使用TCP传输控制协议作为通信协议,使用TCP地址的示例地址如下所示。

net.tcp://localhost:8731/server/18-2

如果端口号没有指定,则TCP会使用默认端口号808作为其默认端口,示例地址如下所示。

net.tcp://localhost/server/18-2

3HTTP地址

HTTP地址使用HTTP传输控制协议作为其通信协议,使用HTTP地址的示例地址如下所示。

http://localhost:8731/18-2

如果端口号没有指定,则HTTP会使用默认的端口号80作为其默认端口。

注意:无论是TCP协议还是HTTP协议,不同的服务可以公用相同的端口号。

4IPCMSMQ地址

IPC地址使用net.tcp作为通信协议,使用net.tcp地址的示例地址如下所示。

net.pipe://localhost/18-2

正是因为IPC地址使用net.pipe进行传输,所以IPC地址将使用Windows的命名管道机制。在WCF中,如果服务使用命名管道,

则该服务只能接收来自同一台客户端计算机的调用。因此,在使用时必须明确的指定WCF提供服务的计算机名,

从而为管道名提供一个惟一的标识字符串。而MSMQ地址使用net.msmq进行传输,即使用了微软消息队列机制,

MSMQ地址的示例地址如下所示。

net.msmq://localhost/18-2


三、契约


WCF中,所有的WCF服务都会被公开成为契约。契约是服务的功能的标准描述方式,通常情况下WCF包含四种类型的契约,

这些契约如下所示。

 服务契约(Service Contract):服务契约定义了客户端能够执行的操作,服务契约是WCF中使用最为广泛的一种契约。

 数据契约(Data Contract):数据契约定义了客户端与服务器之间交互的数据类型。

 错误契约(Fault Contract):错误契约定义了操作中出现的异常,包括定义服务出现的错误并传递返回给客户端。

 消息契约(Message Contract):消息契约允许服务直接与消息交互,但是WCF很少使消息契约。

WCF使用特性ServiceContractAttribute标识服务契约,而使用OperationContractAttribute标识服务方法。示例代码如下所示。

 

上述代码使用ServiceContractAttribute标识服务契约,而使用OperationContractAttribute标识服务方法,OperationContract只能用于方法,指明客户端是否能够调用此方法。使用OperationContract标识可以标识私有方法以使用SOA的方式进行构架,虽然这样是可以实现客户端调用,但是作为面向对象的设计是不推荐使用该方法的。由于能够使用ServiceContractAttribute来标识服务契约,开发人员能够自定义标识指定相应的方法是否能够被客户端调用,示例代码如下所示。

 

在上述代码中的Post方法不会成为契约。WCF允许开发人员使用DataContractAttributeDataMemberAttribute来标识自定义数据类型和属性,示例代码如下所示。

上述代码使用了DateMember定义了属性和相应的字段,这样就可以在服务方法中传递复杂的数据体了。

 

 

 


 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值