分享
 
 
 

WSE使用总结

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

WSE使用总结

一:概要

1. WSE1.0 Sp1

WSE(Web Services Enhancements) 是微软提供的一个实现了WS-Security, WS-Routing, WS-Attachments and DIME 等标准的组件(dll)。它使得开发人员可以不需要深入了解上述协议的具体内容就可以开发相应的Web Services 程序,大大简化了开发难度,使得Web Services应用在企业级项目上成为可能。

2. 常用的几个用途

▲ 添加/修改自定义的SOAP HEADER

▲ 加入身分验证

▲ 加密SoapBody信息

▲ 使用附件

▲ 添加soap router信息

二:设计

2.1 项目的提出:

在一个网上采购系统中,每一个供货方提供给采购方一个WebServices,其中有一个提供货物清单的WebMethod。这个WebMethod的名字可以是不一样的,但其都提供相同的接口。这里,我们假定需要两个入口参数,返回一个string 类型的xml文件。至于为什么假定需要两个参数,在本文后面当有介绍。在实际实现中,接口是可以制定相应规范的,这样也就可以最大限度的重用proxy了。

一个采购方希望可以得到最佳的采购方案(本文只讨论技术层次,人际关系,公司关系等不做研究),那么它就会尽可能多的加入更多的供货方。有可能的情况是每天都会有新的供货方加入,因此需要采购方系统是一个可扩展的系统。在本例中,当采购方需要查询一个部件的供货信息的时候,它将使用一个名为GetAllProduct(string name)的方法来呼叫所有的WebServices,并将得到的返回结果汇总显示。由于本文只是以介绍WSE为主,因此不过多讨论系统设计的问题。因为这个项目是我临时杜撰出来,因此在很多方面都不完善,不过我只是描述WSE在使用方法,是一个纯粹的技术的讨论。

由于随时都会有新的WebService被加入,因此如果我们利用添加Web引用的方式加入Web Services,那么就把程序写得很死,失去了灵活性和扩展性。因此,我们需要由程序根据WebServices的WSDL来生成proxy,并编译成相应的DLL。这里,我们可以人为的定义一个ServiceID作为主键来唯一指定一个WebServices。在实际开发中,我们将使用Proxy,Factory设计模式来进行系统设计,将不同的WDSL的Proxy的生成,Proxy的构造封装成相对独立的模块。我们将使用WSDL.exe应用程序,以及.net reflecting(反射)的功能 实现。

在调用WebService或者接收返回信息的时候,我们可能需要加入一些额外的东西,例如身份认证,定制的SoapHeader,加密等操作,这里我将使用微软提供的WSE1.0来实现。具体如何实现可以参考微软提供的quickstart的例子。其包含在WSE1.0sp1的下载包中,具体位置如下:

http://www.microsoft.com/downloads/details.aspx?FamilyId=06255A94-2635-4D29-A90C-28B282993A41&displaylang=en

2.2 proxy 的产生以及使用

1. 根据WSDL自动生成proxy文件(PrxoyFactory,使用WSDL.EXE)

可以自己制作一个工具,用来根据提供的WSDL地址生成proxy的cs文件。主要代码如下所示:

string parameter = WSDLUrl;

parameter += " /l:C#";

parameter += " /n:" + ServiceID;

parameter += " /o:" + Constants.LIBRARY_PATH + "\\" + ServiceID + ".cs";

// Use serviceID as output file name

try

{

ProcessStartInfo startInfo = new ProcessStartInfo(Constants.WSDL_PATH, parameter);

Process process = Process.Start(startInfo);

process.WaitForExit();

if (process.ExitCode != 0)

throw new Exception("generate Proxy error");

return true;

}

catch (Exception ex)

{

}

示例 2.1

2. 修改生成proxy文件,将原来的继承HttpWebClientProtocol 改成Microsoft.Web.Services.WebServicesClientProtocol

3. 根据数据库内容,为不同的Proxy添加不同的Pipeline(PipeLineFactory)

每一个proxy都会有一个微软提供的默认的pipeline。这个pipeline将包括了proxy需要使用到的OutputFilter,InputFilter,并且所有的Filter顺序至关重要。因此,我们在设计一个WebServices 的时候将指定一个唯一的ServiceID,并且将其需要使用的Filter加入数据库相应的表中。表应该有这个Filte的类型(I/O),顺序,名字等。:

4. 在proxy 中,invoke webservice的方法应该是根据不同的WebMethod Name而不同。

如下所示:

object[] results = this.Invoke(pipeline.OperationName, new object[] {

msgID,

sXml});

5. 如果要在asp.net webservice中加入Filter,目前只能在global.asax文件的application_start()加入。因此,如果在一个WebService中提供了多个WebMethod,并且,对于对于不同的webMethod可能需要不同的Filter(也可能没有)。这种情况下,可以将WebMethod分开,做成多个WebService。每一个global.asaz中的filter只对自己所在的visual folder的请求/响应起作用。

6. 需要注意的是如果我们需要在一个webservices server上面加入filter(提供解密,验证功能),那么我们有两种方法作为选择。一种是在global.asax文件中的application_start()加入全部的filter,另外一种是在web.config中加入。这样,所有对这个虚拟目录的soap请求都会经过这些filter。但是,如果这个WebServices提供了两个WebMethod,并且只有其中的一个需要filter,另外一个不需要,上述方法就无法实现了。如何可以动态的为每一个SOAP请求分配filter一直也是我想知道的问题(类似proxy请求端),大家谁知道的也可以告诉我,谢谢。

[/url]

参考:[url=http://msdn.microsoft.com/webservices/building/wse/default.aspx]http://msdn.microsoft.com/webservices/building/wse/default.aspx

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有