WCFWeb Service.docx
- 文档编号:2883485
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:10
- 大小:286.17KB
WCFWeb Service.docx
《WCFWeb Service.docx》由会员分享,可在线阅读,更多相关《WCFWeb Service.docx(10页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WCFWeb Service
![提示](https://static.bdocx.com/images/bang_tan.gif)