新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → [转帖].net学习:WSE使用总结 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4365 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [转帖].net学习:WSE使用总结 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     愚者 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:愚者
      等级:计算机学士学位
      文章:259
      积分:2375
      门派:XML.ORG.CN
      注册:2004/10/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给愚者发送一个短消息 把愚者加入好友 查看愚者的个人资料 搜索愚者在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看愚者的博客楼主
    发贴心情 [转帖].net学习:WSE使用总结

    出处:CSDN
    责任编辑:ljx
    作者:rottenapple  
    ------------------------------------------------------------------------
    一:概要

      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请求端),大家谁知道的也可以告诉我,谢谢。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    http://photo.cnitv.com/PicLib/Pictures/Pi_21377.gif
    人生的意义不在马到成功,而在于不断求索,奋力求成。每一件有意义的事都需要不得我们以坚强的信念去完成,这样,我们的生活才会更加充实,意志更加坚强。
    人与人之间虽然相隔很近,但是心却离得很远!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/10/22 0:27:00
     
     xmzhy 帅哥哟,离线,有人找我吗?狮子座1978-8-18
      
      
      威望:5
      等级:计算机学士学位
      文章:385
      积分:2003
      门派:XML.ORG.CN
      注册:2003/10/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xmzhy发送一个短消息 把xmzhy加入好友 查看xmzhy的个人资料 搜索xmzhy在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xmzhy的博客2
    发贴心情 
    see
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/2/23 8:31:00
     
     GoogleAdSense狮子座1978-8-18
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/2 16:47:47

    本主题贴数2,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms