【问题标题】:Web Service vs Form postingWeb 服务与表单发布
【发布时间】:2009-04-28 11:53:27
【问题描述】:

我有 2 个网站(www.mysite1.com 和 myweb2.com,这两个网站都在 ASP.NET 中,以 SQL 服务器作为后端),我想将数据从一个站点传递到另一个站点。现在我很困惑是否使用网络服务或表单发布(从 mysite1 到 myweb2 中的页面)

谁能告诉我两者的优缺点?

【问题讨论】:

    标签: web-services


    【解决方案1】:

    我假设您的网络服务是指基于 SOAP 的网络服务?

    无论如何,两者都是平等的,但优势很少。发布更轻量级,而 SOAP 是标准化的(有点)。我会选择更安静的方法,因为我认为 SOAP 对于简单任务来说开销太大,而没有提供太多优势。

    【讨论】:

      【解决方案2】:

      Webservices 是SOAP messages(SOAP 协议使用 XML 来回传递消息),因此两端的服务器必须了解 SOAP 以及您想在它们之间谈论的任何扩展,它们可能(但不要必须)能够理解 WMDL 文件(“解释”各种服务端点和可用的远程功能)。通常我们将其称为 SOAP / WS-* 堆栈,强调“堆栈”,因为有一些软件需要可用,并且 SOAP 调用越复杂,该堆栈的可用和维护就越多.

      另一方面,使用 POST 主要与 RESTful behaviours 相关联,作为此类协议的示例,请查看 HTTP。在 POST 中您当然可以发布复杂的 XML,但人们倾向于使用普通 POST 来简化调用,并使用HTTP responses 作为回复。您可能不需要任何额外的软件,因为大多数(如果不是所有)webkits 都支持 HTTP。如果您想知道,我自己的偏见倾向于 REST。通过使用 HATEOAS,您可以为自我感知系统创建非常好的基础架构,这些系统可以通过负载和可用性实时修改自身,而不是 SOAP 方式,这就是 for 论点的核心它; HTTP 专为大型分布式网络而设计,处理性能和稳定性。 SOAP 往往是一站式的,如果它坏了,你就塞满了东西。 (再次,记住我的偏见。我在我的博客上写了很多关于这个的文章,尤其是the architecture sideimpact of SOA vs. ROA。:)

      关于哪个“更好”存在很大的争论,对此我只能说“这完全取决于你想做什么,你喜欢怎么做,你需要做什么,你的环境,你的经验,太阳和月亮的位置,以及我的猫的心情。”嗯,意思,很多。

      我完全赞成对此进行有益的辩论,但我倾向于认为 SOAP 是一种再发明; SOAP 是一个带有标题和正文的信封,如果这听起来很熟悉,那正是 HTML 的设计方式,很少有人会看到这一事实。 HTTP 只是一种用于转移内容的协议,得到了很好的理解和极好的支持,而 SOAP 使用它来转移他们的 XML 信封。转换 SOAP 和 HTML 之间有真正的区别吗?嗯,是的,最大的区别在于 SOAP 重新发明了 HTTP 的所有细节(缓存、可寻址性、状态、缩放),然后只使用 HTTP 来传递消息而不是其他任何东西,让堆栈本身必须处理提到的那些细节早些时候。因此,HTTP 的许多优点被忽略并在另一层中重新创建(因此,您需要一个 SOAP 堆栈来处理它),在我看来,这似乎是一种浪费、无知并增加了复杂性。

      接下来是你想做的事。对于非常复杂的事情,webservices 堆栈中有很多标准(我认为现在大约有 1200 页)可以帮助您,但如果您的需求比较适中(即,不是那么疯狂关于非常复杂的安全性,例如)请求的简单 POST(或 GET)和带有结果的信封可能就足够了。正如您可能知道的那样,HTTP 中的结果是 HTTP 内容类型,因此已经支持很多,但是您可以创建自己的,例如 application/xml+myformat (或者更准确地说,如果我没记错的话,application/x-xml+myformat )。获取请求,如果是响应码 200,然后解析。

      两者都可以。一个很重(WS-* 堆栈),具体取决于您的需求,另一个更轻量级并且已经受支持。正如他们所说,剩下的就是胶水。

      【讨论】:

        【解决方案3】:

        我会说网络服务绝对是最好的选择。一些专业人士:

        • 如果将来您需要添加另一个网站,您的基础架构(网络服务)已经存在
        • 在使用 cookie 或 可能会触发浏览器隐私限制
        • 如果您使用表单发布,您必须 一遍又一遍地编写相同的代码 再次,同时使用 webservice 你编写一次代码, 然后在多个位置使用它。 更容易维护,更少的代码 写。
        • 可维护性(这与 以上几点)当然,所有的 与交换数据相关的代码是 一站式服务(您的网络服务)

        可能还有更多。比如设计时支持/代码完成。

        【讨论】:

          【解决方案4】:

          根据我的小经验,我会说您最好使用 Web 服务,因为您可以在代码中看到服务的方法和结构,一旦您在接收端创建了它。

          如果使用表单发布方法,您将不得不伪造表单提交,这不像进行 Web 服务调用那样简洁。

          您的第三种方法是让数据库说话,尽管我猜它们是不同的并且不能“看到”彼此?

          【讨论】:

          • 无需伪造表单提交。表单提交只是一个 post 方法。在 .NET 中,使用 HTTPWebRequest 类 (netomatix.com/httppostdata.aspx) 发送 POST 和 GET 方法同样容易
          • 对不起,我口齿不清。我的意思是说,如果使用 SOAP,您必须构建要发送的发布数据,而不是使用具有已定义参数的好方法。
          【解决方案5】:

          我建议使用 Web 服务(或 WCF)。正如 Beanie 所说,通过服务,您可以看到(您公开的)服务的方法和类型,这将使​​数据移动更加容易和清洁。

          【讨论】:

            【解决方案6】:

            我同意 AlexanderJohannesen 的观点,即 SOAP Web 服务或 RESTful api 是否更好是值得商榷的,但是如果这两个站点都在您的控制之下并使用 asp.net 完成,那么一定要使用 SOAP Web 服务。 Visual Studio 提供的用于创建和使用 Web 服务的工具非常棒,创建两个站点之间的链接不会花费您超过几分钟的时间。

            在您要接收通信的站点中,通过在 VS 中选择添加项目来创建 Web 服务。选择 Web 服务并适当命名。然后只需创建一个具有您要实现的逻辑的方法并添加属性[WebMethod],例如。

            [网络方法] public void AddComment(int UserId, string Comment) { // 做东西 }

            在您的测试服务器上部署它,例如 tst.myweb2.com。

            现在在消费端 (www.myweb1.com),选择添加 Web 引用,将 url 指向我们刚刚创建的 web 服务的地址,为其命名并单击添加引用。你有一个代理类,你可以像本地类一样调用它。很简单。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-07-28
              • 2023-03-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多