WCF和HTTP应用编程


HTTP应用场景
当你使用IE或者FireFox或者其他浏览器浏览新浪、搜狐等新闻网站时…
当你在网上浏览各种购物网站时…
当你在网上发表各种帖子时,…

当你用浏览器通过(Http://www………)的时候,都离不开HTTP协议;

HTTP简介

1.HTTP(HyperText Transfer Protocol,超文本传输协议)在TCP/IP体系结构中,HTTP属于应用层协议,位于TCP/IP的顶层

2.目前常见的HTTP标准是HTTP/1.1;
3.HTTP定义Web客户端(一般是浏览器)如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端
4.HTTP用于在客户端与服务器之间传递超文本文件
在这里插入图片描述

HTTP的特点

HTTP以TCP方式工作。
HTTP客户端首先与服务器建立TCP连接,然后客户端通过套接字发送HTTP请求,并通过套接字接收HTTP响应。

HTTP是无状态的
“无状态”的含义是,客户端发送一次请求后,服务器并没有存储关于该客户端的任何状态信息。即使客户端再次请求同一个对象,服务器仍会重新发送这个对象,而不管原来是否已经向该客户端发送过这个对象。

HTTP使用元信息作为标头
HTTP通过添加标头(Header)的方式向服务器提供本次HTTP请求的相关信息,即在主要数据前添加一部分信息,称为元信息(Metainformation)。
例如,传送的对象属于哪种类型,采用的是哪种编码等。

HTTP的请求与响应

1.HTTP请求
设置请求方式:可以用HttpWebRequest的【Method】属性设置请求的方法。如果不设置【Method】属性,系统默认请求的方法为“GET”。

例如,下面的代码设置HTTP请求的方法为“POST”:
string uri = “http://www.google.cn”;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = “POST”;

当客户端将HTTP请求发送到服务器时,其内部发送格式如下所示:
<request-line> :第1行必须是一个请求行(request line),说明请求的类型、要访问的资源及使用的HTTP版本
<headers> :标头(header)部分,说明服务器要使用的附加信息,这部分一般由多行组成。
<blank line> :标头之后是一个空行(blank line)
[<request-body>] :空行之后是请求的主体(request-body),主题中可以包含任意的数据

(1)GET请求
GET请求是最为常见的一种请求,表示客户端告诉服务器获取哪些资源。

GET请求后面跟随一个网页的位置。除了页面位置作参数之外,这种请求还可以跟随协议的版本如HTTP/1.0等作为参数,以发送给服务器更多的信息。

(2)POST请求
POST请求要求服务器接收大量的信息。与GET请求相比,POST请求不是将请求参数附加在URL后面,而是在请求主体中为服务器提供附加信息

POST请求一般用于客户端填写包含在Web表单(Form)中的内容后,将这些填入的数据以POST请求的方式发送给服务器

对于ASP.NET网页,当用户通过客户端浏览器在Web页面中填入数据,然后单击提交按钮时,客户端向服务器发送的就是POST请求。

(3)HEAD请求
HEAD请求在客户端程序和服务器端之间进行交流,而不会返回具体的文档。

因此HEAD方法通常不单独使用,而是和其他的请求方法一起起到辅助作用。

典型应用:一些搜寻引擎使用的自动搜索机器人采用这个方法来获得网页的标志信息,或者进行安全认证时,使用这个方法来传递认证信息等,也可以判定某个网页资源是否可用,这些功能均可用通过HEAD请求来实现的。

2.HTTP响应
客户端向服务器发送请求后,服务器会回送HTTP响应。

HTTP响应的一般格式为:
<status-line>
<headers>
<blank line>
[<response-body>]

注意:对于HTTP响应来说,它与HTTP请求相比,唯一的区别是第1行中用状态信息代替了请求信息。状态行(Status Line)通过提供一个状态码来说明所请求的资源情况。
在这里插入图片描述
所有HTTP响应的第一行都是状态行,该行内容依次是当前HTTP版本号、3位数字组成的状态码以及描述状态的短语,各项之间用空格分隔。例如:HTTP/1.1 200 OK ;//状态行
状态码的第一个数字代表当前响应的类型,具体规定如下
1xx 消息——请求已被服务器接收,继续处理。
2xx 成功——请求已成功被服务器接收、理解、并接受
3xx 重定向——需要后续操作才能完成这一请求。
4xx 请求错误—请求含有词法错误或者无法被执行。
5xx 服务器错误—服务器在处理某个正确请求时发生错误

HTTP应用编程的技术选择

1. WebRequest类和WebResponse类

请求/响应模型的抽象(abstract)基类。用于访问Internet数据。它允许使用该请求/响应模型的应用程序可以用协议不可知的方式从Internet请求数据。

2.HttpWebRequest类和HttpWebResponse类
HttpWebRequest和HttpWebResponse是针对于HTTP的特定实现。该类通过HTTP协议和服务器交互。

3.使用WCF来实现HTTP应用编程,程序员只需要处理业务逻辑即可,其他工作细节让WCF内部去完成就行了。因此,用WCF和基于任务的编程模型实现HTTP应用编程是建议的做法

WCF中与HTTP相关的绑定

基本HTTP绑定(BasicHttpBinding类)

基本HTTP绑定用BasicHttpBinding类来实现,在配置文件中用basicHttpBinding元素来配置。

利用BasicHttpBinding,可轻松实现类似传统的Web服务实现的功能。

默认配置和自定义配置
默认值及可选参数
安全模式
消息编码(messageEncoding)消息文本字符编码(textEncoding)
传输方式(transferMode)
是否支持会话、事务、双工
其他

其他常用的HTTP绑定

安全HTTP绑定(WSHttpBinding类)
WSHttpBinding定义一个适合于非双工服务的安全、可靠且可互操作的绑定。该绑定实现了WS-ReliableMessaging规范(保证了可靠性)和WS-Security规范(保证了消息安全性和身份验证)。

双工安全HTTP绑定(WSDualHttpBinding类)
WSDualHttpBinding类也是使用HTTP作为基础传输协议,在服务端和客户端配置文件中用wsDualHttpBinding元素来配置。该绑定也是使用“文本/XML”作为默认的消息编码。但是,它仅支持SOAP安全模式,且需要可靠的消息传递。

WCF客户端和服务端的消息交换模式

请求应答模式(Action/Reply)

“请求/应答”模式:客户端向WCF服务端发送请求后,服务端执行服务操作,并将操作结果返回到客户端。客户端如果不是通过异步操作来调用的,在服务端返回服务操作结果之前,客户端代码将处于阻塞状态。这种模式也叫“请求/答复”模式。

单向模式(IsOneWay)

单向模式:
客户端调用WCF服务操作时,服务端不向客户端返回操作结果。即使服务端出现执行错误,它也不会向客户端返回结果。
单向模式的优缺点:
优点:速度比“请求/应答”模式快。
缺点:当服务端执行过程中出现错误时,由于客户端接收不到任何返回的消息,因此也无法发现服务端是否正确执行了操作方法。

双工通信

双工(duplex)是指客户端和服务端都可以主动呼叫对方。在这种通信模式中,WCF利用双向绑定实现服务端和客户端相互公开终结点的信息。
双工通信的主要设计思想
1、配置服务端绑定让其支持双工
在Web.config中的节点添加支持
2、在服务端声明和实现接口
一个接口用于服务(客户端调用、在服务端实现)
一个接口用于回调(服务端调用、在客户端实现)
3、在客户端实现回调接口

同步操作和异步操作

在WCF基本用法的例子中,我们大部分使用的都是同步调用。实际上,当客户端用【添加服务引用】的办法生成客户端代理类时,默认情况下,生成的所有调用操作既包含同步调用的方法,也包含基于任务的异步调用的方法。

WCF和HTTP编程示例

五子棋游戏规则描述
服务端和客户端通信接口

客户端发送给服务端的请求
服务端发送给客户端的命令

在这里插入图片描述

服务端编程

1.定义和实现协定(IGobangService接口和GobangService类)
2.创建与游戏室管理相关的其他文件
User类:封装每个游戏玩家信息
GameTable类:封装每个游戏桌的信息
CC类:保存连接用户以及每桌游戏的情况。
3.修改服务端配置

客户端编程

添加服务引用
创建客户端游戏界面
棋盘:Image控件
产生棋子的事件:Image_MouseDown
修改主界面

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值