ASP.NET unleashed 2nd Edition 学习笔记 第六部分

Part VI: Building ASP.NET Web Services
CHAPTER 22 Creating an XML Web Service
    22.1 Overview of XML Web Services
        讲述了Web Service的优点
    22.2 Creating a Simple XML Web Service
        创建web service的步骤如下
            创建一个类,是public的,继承自WebService
            声明方法,是public的,并且有attribute WebMethod修饰
            源代码文件的后缀名是asmx
        Setting WebMethod Attributes
            WebMethod attribute有很多的可选属性,
                BufferResponse,默认情况下,Web Service方法和属性是成块成块作为响应返回的,如果希望使用流的方式进行响应的话,可以设置这个属性为false
                CacheDuration,默认情况下,web service方法和属性是不会对响应做cache的。但是通过设置这个属性为一个整数值能够完成cache的功能
                Description,描述
                EnableSession,默认情况下,Web Service的方法和属性是不参与到session state中的,如果设定为true,那么方法和属性就能够使用session state会话状态了
                MessageName,对web method起一个别名
                TrasactionOption,用于设定web service是否参与到事务中,默认是false
        Setting WebService Attributes
            WebService attribute也有很多可选属性,
                Description,描述
                Name,为Web Service起一个名字,默认使用了类的名字
                Namespace,为Web Service指定一个xml namespace。默认是http://tempuri.org/,可以使用其他的URL作为namespace,用处在于作为一个唯一标识使用,以便两个公司开发的web service不会冲突
    22.3 Testing an XML Web Service from a Browser
        如果想要测试web service,可以类似于访问网页一样访问asmx文件
        可以使用SOAP/HTTP-Post/HTTP-Get来访问web service
        如果asp.net默认不支持某种访问方法,那么可以通过在web.config文件的<webServices> <protocols>中增加访问方式的节点可以解决这个问题
        Invoking an XML Web Service with HTTP-Get
            HTTP-Get是标准的HTTP协议,使用URL来传递请求或者post一个使用了METHOD="Get"的form
            例如可以在HTML文档中,增加一个如下的超链接来调用web service,如下,
                <a href="/Service/SomeWebService.asmx/MethodName?ParameterName=Value">Content</a>
            也可以使用URL的方式直接调用Web Service,如下,
                http://localhost/Service/SomeWebService.asmx/MethodName?ParameterName=Value
            在被调用后WebSercie的方法会返回一个XML文档,用于代表执行后的结果,例如,
                <?xml version="1.0" encoding="utf-8" ?>
                  <double xmlns="http://tempuri.org/">0</double>
        Invoking an XML Web Service with HTTP-Post
            HTTP-Post是标准HTTP协议,用于传递属性METHOD="Post"的form提交的数据
            可以在HTML文档中,使用如下的方式调用WebService,
                <form method="post" action="/Service/SomeWebService.asmx/MethodName">
                    <input name="TF" value="32">
                    <input type="submit" value="Convert">
                </form>
            返回结果和HTTP-Get的一样
        Invoking an XML Web Service with SOAP
            SOAP,简单数据访问协议,允许开发员在网络上传递更复杂类型的消息。可以借助SOAP协议来传递不能够使用HTTP-Get或者HTTP-Post传递的数据
            SOAP是一个基于XML格式的协议。SOAP消息包含一个信封头部分,用于包含被传输的数据
            SOAP调用的样式大致如下,
                ……
                    <soap:Body>
                        <SomeMethod xmlns="……" >
                            <ParameterName>value</ParameterName>
                        </SomeMethod>
                    </soap:Body>
                ……
            和HTTP-Get/HTTP-Post不一样的是,SOAP协议不是被约束在HTTP协议上的,可以使用在HTTP协议上使用SOAP,也可以在其他协议上使用SOAP,例如SMTP
    22.4 Accessing an XML Web Service Through a Proxy Class
        Generating an XML Web Service Proxy Class
        Using an XML Web Service Proxy Class
            这两部分不看了,VS.Net都已经在背后做好了
        Working with the Web Services Description Language Tool
            这部分讲解了Wsdl.exe这个工具的命令行参数
        Setting Proxy Class Properties
            Proxy类的父类是SoapHttpClientProtocol类,SoapHttpClientProtocol类有很多的属性,
                AllowAutoRedirect,bool值,表明对某个web service的请求是否可以被自动重定向到其他的URL
                ClientCertificates,客户端认证集合
                CookieContainer,包含了和proxy类有关的cookie的一个CookieContainer实例
                Credentials,实现了ICredentials接口的类,用于Basic、Digest和NTLM或者Kerberos认证
                PreAuthenticate,bool值,表明www认证头是否在每次请求的时候都需要发送,默认是false
                Proxy,实现了IWebProxy接口的类,包含了保证请求通过防火墙的信息
                RequestEncoding,对于代理请求所使用的字符串编码方式
                Timeout,整形数值,微秒级别,表明代理请求的过期时间,默认为-1,代表永远不过期
                Url,代理在发送请求的时候所使用的URL
    22.5 Transmitting Complex Data in an XML Web Service
        XML Web Services and Arrays
            WebService的web method声明返回Array类的一个实例,杂page端,接收这个array,并根据array创建界面
        XML Web Services and Classes
            首先,创建要返回的类
            其次,编码WebService和WebMethod,其中WebMethod返回类型是已经创建好的类
            最后,在Page上进行接收WebMethod以后的编程处理
        Web Services and DataSets
            首先,编码WebService和WebMethod,其中WebMethod返回类型是DataSet
            其次,在Page上进行接收WebMethod以后的处理
        Web Services and Binary Files
            首先,编码WebService和WebMethod,其中WebMethod返回类型是Byte数组
            其次,在Page上进行编码处理,可能用WebMethod返回的Byte数组创建MemeryStream的实例,再把MemeryStream的实例作为参数初始化其他的Binary内容,例如图片、声音等等
    22.6 Examining XML Web Service and Web Site Interaction
        XML Web Services and Application State
            web站点和web服务可以共享同一个application state,使用application state可以在web站点和web服务之间交换信息
            书上举的例子是一个计数器的例子,在web服务中借助application state实现了一个application级别的计数器,然后在web站点上,调用这个web服务,完成计数的增加等等
        XML Web Services and Session State
            默认情况下,出于性能方面的考虑,session state对于web服务来讲是被禁止掉的。但是通过修改WebMethod Attribute的EnableSession属性,可以允许被修改的web方法使用session state

CHAPTER 23 Advanced XML Web Services
    23.1 Using the WebService Behavior
        之所以能够使用IE6直接访问web service,是因为使用了WebService behavior
        behavior是一个组件,可以和HTML页面中的元素关联起来,从而扩展此元素的默认功能
        使用Behavior访问Web服务的最大优点在于,可以在不重新载入整个页面的前题下,更新页面的内容
        Examining Limitations of the WebService Behavior
            behavior有一些限制,如下,
                首先,使用WebSercie behavior只能够访问哪些位于同一个域中存在形式为Web页面的包含有behavior的web服务。如果想要访问远程的其他web服务,必须通过位于同一个域中的代理web服务来完成
                第二,WebService behavior支持所有的.Net基本数据类型以及相应的数组形式,但是,不直接支持更复杂的数据类型,例如DataSet,DataTable或者自定义的对象
        Creating a Simple Page with a WebService Behavior
            如果要通过WebService behavior直接访问Web服务,而不借助于proxy类,需要按照以下步骤,
                第一,把WebService behavior和HTML页面上的元素关联起来,例如,
                    连接一个div和WebService代码如下,
                        <div id="myDiv"
                            style="behavior:url(webservice.htc)"
                            onresult="page中定义的方法名称"  //这种处理回调结果的方法,是事件处理方式,结果返回的时候,触发指定的事件
                        /div>
                第二,使用WebService behavior的useService()方法来获取web服务的位置,例如
                    Service.useService("/Service/WebService.asmx?WSDL", "ServiceName");
                第三,通过WebService behavior的callService()方法来调用web服务
            默认情况下,WebService behavior异步调用web服务的方法,不是同步调用的
            当把HTML页面上的元素和WebService behavior连接起来的时候,就已经设定了使用JavaScript的函数来处理结果
        Using a WebService Behavior Callback Function
            获取web方法的结果有两个途径,
                第一,使用事件处理程序
                第二,定义回调函数
            使用回调函数要完成的步骤是,
                在WebService behavior的callService()方法中,第一个参数指定回调函数的名称
                在连接WebService behavior和HTML页面元素的时候,不指定onresult属性的值
        Catching Errors in a WebService Behavior
            如果Web服务出现了错误,怎么办?怎么处理这些异常呢?
            使用result对象的error属性来获取异常,如果web服务没有被访问到,result.error属性是true
            使用errorDetail对象获取详细的错误信息,errorDetail有三个属性,
                code,错误代码
                raw,由web服务的方法调用返回的SOAP包的原始内容
                string,一个人性化的错误信息
        Using a WebService Behavior to Perform Partial Page Updates
            通过JavaScript的setInterval函数设定一个等时间间隔的循环,每次循环使用Service.useService()方法和Service.callService()方法来进行web服务的调用,最后,在使用事件处理或者回调函数来处理返回结果,就可以更新部分页面内容了
        Using the WebService Behavior to Retrieve Database Data
            WebService behavior不支持DataTable和DataSet之类的复杂对象,所以,如果需要返回数据记录,可以让web method返回一个数组,把DataTable中的记录转换成数组
    23.2 Securing an XML Web Service
        Overview of the Secure XML Web Service
            所谓的Secury,也就是安全,就是禁止未被授权的用户不能够调用web方法
            一种解决方案是,要求用户在调用web方法的时候提供用户名和密码。这个方法不好,如果web方法非常多,每次都需要验证用户名和密码,太恐怖了
            书中给出的方案是,使用一个自定义的SOAP头以传输验证信息。
                如果在SOAP头中只是传输用户名和密码是非常危险的,因为SOAP包是以xml文档的格式传递的,这要是被别人截获到,是非常危险的
                为了避免其他人截获,可以使用SSL来加密所有发送给web服务的消息,但是SSL对性能的影响是非常大的,毕竟每一个都需要解密和加密
                解决的方案是,定义一个方法,需要使用SSL来加密消息,如果用户得到验证,就返回给用户一个Session Key以便识别用户,这个Session Key放在SOAP头部,代替了用户名和密码的传输,并且通过各session key定一个存活时间长度,也可以保证在过了一段时间以后,session key失效
        Creating the Database Tables
            书上的这部分是为了下面几个部分的演示做准备,使用了两段SQL语句生成了两个数据表,一个WebServiceUsers,存放用户名、密码,一个SessionKeys.sql,存放SessionKey和失效时间
        Creating the Login() Method
            Login()方法返回类型是一个自定义的类型ServiceTicket,主要完成了三件事情
                验证用户名、密码正确与否
                将当前的session state加入到cache中
                返回合法的sessionkey
            自定义类ServiceTicket,有三个属性,
                IsAuthenticated,bool类型
                SessionKey,String类型
                Expiration,DateTime类型
        Retrieving the Custom SOAP Header
            web服务使用自定义的SOAP头来获取验证信息,session key被放在SOAP头中的AuthHeader部分
            通过创建一个SOAPHeader的子类,可以创建一个SOAP头
            如果在web method中需要获取这个头,必须在WebMethod的SoapHeader attribute上进行说明,例如,
                [WebMethod SoapHeader("AuthenticateHeader")]
                public bool GetSomething() { return AuthenticateHeader == null; }
        Authenticating the Session Key
            这部分不多说,就是根据传入的SOAP头中的信息,判断是否是合法用户
        Caching the Session Keys
            把Session Key放入到Cache中,避免每次验证都要去数据库中取数据
        Building the Secure XML Web Service
            不说了,编译一下,部署一下,以便Page可以访问Web服务
        Accessing the Secure Web Service
            如何使用,不讲了,非重点部分
    23.3 Using HTML Pattern Matching
        使用HTML模式匹配,可以把任何的Web站点变成好像是一个Web服务一样。HTML模式匹配可以使得开发员通过设定正则表达式从任何文档中获取内容,获取的内容作为web服务的属性被返回给调用端
        HTML模式匹配的应用场景,
            访问原有的系统中的数据,例如原有的数据作为文件存放在硬盘上,那么使用HTML模式匹配完成数据的查询和读取
            HTML模式匹配也可以用于和没有实现web服务的web站点进行通讯。例如,某个站点没有实现web服务,而是提供了HTML页面,通过使用HTML模式匹配可以从这些HTML页面上抓取需要的信息
        Creating the WSDL Document
            使用HTML模式匹配的最大的工作就是创建一个WSDL文档,文档中描述了通过web服务中的所有方法和属性以及每个方法的参数类型
        Specifying the Regular Expression Pattern
        Creating a Simple HTML Pattern Matching Service
        Using Input Parameters with HTML Pattern Matching
        Building the Six Degrees Web Service

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值