【问题标题】:WS-Security using the ASMX file in ASP.NET 3.5在 ASP.NET 3.5 中使用 ASMX 文件的 WS-Security
【发布时间】:2010-03-26 21:59:40
【问题描述】:

基本上我需要设置我的 ASMX 文件,以便当我在浏览器中将其拉起以显示 WebMethod 规范时,Soap Header 符合此格式:

<soap:Header>
   <wsse:Security>
      <wsse:UsernameToken wsu:Id='SecurityToken-securityToken'>
         <wsse:Username>Username</wsse:Username>
         <wsse:Password>Password</wsse:Password>
         <wsu:Created>Timestamp</wsu:Created>
      </wsse:UsernameToken>
   </wsse:Security>
</soap:Header>

背景故事:我正在与已经构建(并由另一家公司拥有)的客户端应用程序集成。基本上,这个客户端应用程序已经从过去与其他公司的集成中设置了所有的肥皂消息。因此,我们选择仅使用与他们已经设置使用的 WSDL 匹配的 ASMX 文件构建 Web 服务。

是否可以让 WS-Security 处理 ASMX 文件,或者 ASMX 过于简单,我必须升级到 WFC(我真的不想这样做)?

【问题讨论】:

    标签: asp.net soap wsdl asmx ws-security


    【解决方案1】:

    是否可以让 WS-Security 处理 ASMX 文件,或者 ASMX 过于简单,我必须升级到 WFC(我真的不想这样做)?

    是的,可以使用Web Services Enhancements 3(Visual Studio 2005 和 ASMX 的附加组件)。请参阅此 MSDN page 以获取特定于 WSE-3 的教程并使用 usernameOverTransportSecurity 断言,请注意这实际上是安全的,除非连接通过受保护的传输(即 SSL)进行。

    但是,不建议您这样做,我无法理解为什么您不会“想要”“升级到 WCF”。请注意以下非常重要的ASMX/WSE 限制:

    • WSE 不再是支持的产品。虽然它仍然工作,但它不再接收更新甚至错误修复

    • 没有任何版本的 WSE 可以成功集成到 Visual Studio 2008,甚至是在 Windows Vista x64 或更高版本上运行的 Visual Studio 2005。

    • WCF 为提供线程安全的客户端操作和允许代理存在很长一段时间(这反过来提供了显着的每次操作性能优势)而费了很大的力气。另一方面,WSE 代理是一次性的非线程安全对象,每次远程方法调用都会产生设置时间(即使使用安全对话)。这也使得它们在很大程度上不适合依赖注入和许多其他广泛使用的模式。

    这些只是您不应再使用 WSE 的部分原因。您应该在客户端使用 WCF 的原因是多方面的,包括但不限于模型和代理的分离、基于 REST 的服务的使用以及更好的处理集合类型。

    除非你真的必须继续使用 ASMX,请重新考虑你拒绝迁移到 WCF - 除非该服务使用 XML 序列化做了很多不寻常的事情,否则不会超过 5 分钟开关。

    【讨论】:

    • @Aoronaught:感谢您提供的所有信息。我希望远离 WCF 服务的原因是因为我听说它很容易设置,但在服务器上部署很痛苦。您是否知道除了 Visual Studio 2008 提供的简单“发布”命令之外,WCF 是否还需要其他设置过程?我们已经部署了几个 ASMX 服务,部署就像单击“发布”一样简单。如果 WCF 也一样简单,那么我很乐意进行切换。
    • @Adam:应该一样简单。我们不使用 VS“发布”命令,但我们的部署通常只是一个直接的文件副本。也许有人说部署很痛苦,因为如果服务器还没有 .NET 3.5 Framework 需要很长时间来安装它?
    • 您还需要学习“WCML”,或者更好地称为“WCF 配置标记语言”。您花费数小时茫然地盯着配置文件,其中包含数以亿计的选项。最初几天没有任何效果,然后神奇地,一个调整设置使该死的东西工作。您在配置文件 cmets 中添加了粗体警告,以警告其他人永远不要再次触摸该文件,否则将面临死亡的痛苦。否则 WCF 是轻而易举的事。去吧。 :-)
    • 我很欣赏这是一个迟到的评论,但是我刚刚尝试让 WSE 风格的 WS-security ASMX 服务在 WCF 中工作,除非我错过了一个技巧 - 这是最复杂和最困难的永远的事情。以至于我放弃了,因为没有有用的错误可以帮助我让它工作。不过,显然欢迎所有帮助,因为我更愿意使用它。我最大的问题是在网上找不到任何关于如何使用它的像样的文档!
    • @harrison:网上有很多帮助;尝试启动here。如果这对您不起作用,您应该提出一个问题,解释您尝试了什么以及什么不起作用(您遇到什么错误等)
    【解决方案2】:

    不,旧版 ASMX Web 服务不支持 WS-Security 或任何其他 WS-* 标准。

    由于 Microsoft 现在将 ASMX Web 服务视为“传统技术”,因此您应该使用 WCF 来完成这项工作。


    另一个答案建议使用 WSE。这甚至不是一个解决方案。 WSE 已完全过时,只能作为最后的手段使用。

    【讨论】:

      【解决方案3】:

      您可以使用经典 Web 服务实现 SOAP / WS-Security 服务。这是来自 MSDN 的 a tutorial

      不过,所有这些在 WCF 中都更容易。

      编辑:

      拉错了链接。 Here's the one 我的意思是粘贴(使用 WSE 2 的 CodeProject 教程,尽管 WSE 3 是最新版本,我只使用了 pre-WCF)。

      【讨论】:

      • @Eric:我查看了那个链接,它几乎不是一个教程。这只是 2002 年的一篇文章。
      • @John:你是对的,你错了。我确实从我的书签中提取了错误的链接(更新的帖子)。您说旧版 ASMX 不支持 WS-Security 是错误的(请参阅更新的链接)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      相关资源
      最近更新 更多