WCFWeb Service.docx

上传人:b****5 文档编号:2883485 上传时间:2022-11-16 格式:DOCX 页数:10 大小:286.17KB
下载 相关 举报
WCFWeb Service.docx_第1页
第1页 / 共10页
WCFWeb Service.docx_第2页
第2页 / 共10页
WCFWeb Service.docx_第3页
第3页 / 共10页
WCFWeb Service.docx_第4页
第4页 / 共10页
WCFWeb Service.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

WCFWeb Service.docx

《WCFWeb Service.docx》由会员分享,可在线阅读,更多相关《WCFWeb Service.docx(10页珍藏版)》请在冰豆网上搜索。

WCFWeb Service.docx

WCFWebService

WCF下的WebService

本文档来自CSDN

学习.NET的开发人员,在WCF的光芒照耀下,WebService似乎快要被人遗忘了。

因为身边做技术的人一开口就是WCF多么的牛逼!

废话不多,本人很久不写博客,今天总结一下最近几日遇到的几个关于WebService跨语言的调用问题。

 

1 WebService简介 

WebService也叫XMLWebServiceWebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。

是:

通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

     WebService的简介就说这么多,大家都懂的,网上的资料太多了,搞过WebService编程的人员都知道它的优点,没有搞过WS编程的人员也知道它的优点,这里不再累述。

        参考文章:

 

2 SOAP消息结构 

   要学习WebService肯定要了解Soap协议,它是WebService的基础。

        SOAP(SimpleObjectAccessProtocol)简单对象访问协议,它是基于XML的消息传递协议,可以让软件组件和基于服务的应用程序能够使用标准的HTTP协议进行通信(SOAP是基于HTTP之上的)。

 

        SOAP的消息文档是一个XML格式的。

相信大家都看到过:

  

 

 SOAP主要是由4部分组成:

SOAPEnvelope 

这是XML的顶层元素,语法如下:

(1)元素名为Envelope,必须存在,且为根元素。

(2)该元素可以包含命名空间和生命额外的属性。

如果出现额外属性,则必须使用命名空间修饰。

(3)该元素可以包含额外的子元素,如果使用这些子元素,必须有命名空间修饰并且必须跟在SOAPBody元素之后,也就是说Envelope的直接子元素Header和Body必须排列在最前面。

 

 

 

SOAPHeader 

Header应该是Envelope中的第一个子元素,为可选的,语法规则如下:

(1)元素名为Header,不是必须存在,但如果存在则必须是SOAPEnvelope的第一个直接子元素。

(2)Header的所有直接子元素都是它的Item,每个Itemdoiu必须有命名空间修饰。

(3)Header的Item也可以包含下级子元素,但这些子元素不是Header的Item,而是具体Item的内容。

    此外,SOAPencodingStyle属性用于指定Header条目的编码风格,mustUnderstand属性和actor属性用于指定如何处理Item和由谁来处理。

如:

Header>

    

PriorityMXLns:

uniB2B="some-URI"

                     ENV:

mustUnderstand="1">7

Priority>

Header>

 

 SOAPBody

 SOAPBody元素提供一个简单的用于消息的最终接收者交换信息的机制。

其语法如下:

(1)元素名为Body,必须在SOAP消息中出现,同时必须是SOAPEnvelope的直接子元素,若没有Header,则Body必须是第一个直接子元素;若有Header,则Body必须紧跟Header元素存在。

(2)与Header类似,每个Body的Item都必须由命名空间修饰。

此外,Body中有个SOAPFault元素,用于指示调用错误信息。

(3)Body的Item下的子元素不是Body的Item了,而是Item的内容

 

SOAPFault 

用于在SOAP消息中传输错误及状态信息。

如果存在则必须是Body的一个Item,且Body中只能出现一次Fault。

SOAPFault元素有以下几个子元素:

(1) faultcode必须在SOAPFault元素中出现

(2)faultstring该元素是为那些错误代码提供用户可以读懂的错误解释,它不是为程序处理而设置的。

(3)faultactor该元素描述在消息路径中错误的引发者,它类似于SOAPactor属性,不过它不是指示Header条目的接收者,而是指示错误源。

(4)tail该元素用于传输Body元素相关的应用程序的错误消息 

 

 

3 WebService5种模式

 请求响应模式

fire-and-forget模式 

   高级消息模式 

      增量解析和处理模式 

      缓存模式 

 

4 WebService自定义SoapHeader安全验证 

 SOAP标头提供了一种方法,用于将数据传递到XMLWebservices方法或从XMLWebservices方法传递数据,条件是该数据不直接与XMLWebservices方法的主功能相关。

例如,一个XMLWebservices可能包含若干个XMLWebservices方法,而每个方法都需要自定义的身份验证方案。

您不用将参数添加到每个需要自定义身份验证方案的XMLWebservices方法,而可以将引用从 SoapHeader 派生的类的 SoapHeaderAttribute 应用于每个XMLWebservices方法。

从 SoapHeader 派生的类的实现处理该自定义身份验证方案。

按照此方式,XMLWebservices方法使用SOAP标头来仅实现特定于它的功能并添加其他功能。

下面的列表概述接收和处理SOAP标头的基本步骤:

创建一个从 SoapHeader 派生的类,表示传入SOAP标头的数据。

将一个成员添加到实现XMLWebservices的类或XMLWebservices客户端代理类(它们属于在第一步创建的类型)。

指定第二步中在 MemberName 属性中创建的成员,将 SoapHeaderAttribute 应用于XMLWebservices方法或代理类中的对应方法。

在XMLWebservices方法或XMLWebservices客户端代码中访问 MemberName 属性,以处理在SOAP标头中发送的数据。

 

  验证例子代码:

 

(1)首先定义一个自定义SoapHeader 

public class MyHeader:

SoapHeader

    {

        public int ID { get; set; }

        public string Name { get; set; }

        public string PassWord { get; set; }

}

 

(2) 在WebService暴露的方法中添加SoapHeader描述

[WebService(Namespace = "http:

//tempuri.org/")]

    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    [System.ComponentModel.ToolboxItem(false)]

    public class Info :

 System.Web.Services.WebService

    {

        public SoapUnknownHeader[] unknownHeaders;

        public MyHeader MyHeader { get; set; }

        [WebMethod]

        [SoapHeader("unknownHeaders")]

        public string HelloWorld()

        {

            Console.WriteLine("?

>>>>>>>>>>>>>>>>>>>>");

            return "Hello World";

        }

        [SoapHeader("MyHeader", Direction = SoapHeaderDirection.InOut)]

        [WebMethod]

        public string Audit()

        {

            Validate();

            return "这里是验证";

        }

        //验证函数 自定义

        private string Validate()

        {

            if (MyHeader !

= null)

            {

                if (MyHeader.Name == MyHeader.PassWord)

                {

                    return "验证通过";

                }

                else

                {

                    return "验证失败";

                }

            }

            return "未传递消息头";

        }

这里重点看的是服务暴露出来的方法public string Audit()  

在WebService中的类定义一个属性  public MyHeader MyHeader { get; set; }就是我们自定义的SOAPHeader,同时还要在Audit()方法上加上如下描述:

[SoapHeader("MyHeader", Direction = SoapHeaderDirection.InOut)] 

如果客户端传递了相应的SoapHeader就会使用此属性来接收消息,主要特性描述中的参数要指向定义的属性名。

 

 

(3)客户端生存代理 

客户端生成代理大家都知道,工程--右键--添加Web引用即可,现在我们看看里面生成的代码 

MyHeader客户端生成的代理类 

 

代理类中生存对应的属性,同时此类也是继承了SoapHeader类。

[System.Web.Services.Protocols.SoapHeaderAttribute("MyHeaderValue", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)]

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http:

//tempuri.org/Audit", RequestNamespace="http:

//tempuri.org/", ResponseNamespace="http:

//tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, Param

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1