Web服务与表单发布

时间:2009-04-28 11:53:28

标签: web-services

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

任何人都可以告诉我两者的优点和缺点吗?

6 个答案:

答案 0 :(得分:5)

通过Web服务我假设您的意思是基于SOAP的Web服务?

无论如何两者都是平等的,没什么优势。发布更轻量级,而SOAP是标准化的(有点)。我会采用更加安静的方法,因为我认为SOAP对于简单的任务来说是太多的开销,而没有给予太多的好处。

答案 1 :(得分:3)

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

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

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

我是关于这个问题的健康辩论,但我倾向于认为SOAP是一种重塑; SOAP是一个带有标题和正文的信封,如果听起来很熟悉,那就是HTML的设计方式,很少有人会看到。 HTTP只是一种用于转移内容的协议,它很容易被理解并得到很好的支持,而SOAP使用它来转移它们的XML包络。转换SOAP和HTML之间是否存在真正的区别?好吧,是的,最重要的区别是SOAP重新发明了HTTP的所有细节(缓存,可寻址性,状态,扩展),然后仅使用HTTP来传递消息而没有别的东西让堆栈本身必须处理提到的那些好处早。因此,HTTP的许多优点被忽略并在另一层中重新创建(因此,您需要一个SOAP堆栈来处理它),这对我来说似乎是浪费,无知并增加了复杂性。

接下来就是你想要做的。对于非常复杂的事情,Web服务堆栈中有很多标准(我认为这些日子总共大约有1200页)可以帮助你,但是如果你的需求更加温和(即不是疯狂关于严重的复杂安全性,例如,请求的简单POST(或GET)和带有结果的信封可能已经足够好了。正如您可能知道的那样,HTTP中的结果是HTTP内容类型,因此已经支持批量,但您可以创建自己的批量,例如application / xml + myformat(或者更准确地说,如果我没记错的话,可以使用application / x-xml + myformat) )。获取请求,如果它是响应代码200,则解析。

两者都有效。一个是沉重的(WS- *堆栈),取决于您的需求,另一个是更轻量级,已经支持。剩下的就是胶水,正如他们所说的那样。

答案 2 :(得分:1)

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

  • 如果将来您需要添加其他网站,您的基础设施(网络服务)已经存在
  • 使用Cookie时,跨网站表单发布可能会给您带来问题 可能会触发浏览器隐私限制
  • 如果您使用表单发布,则必须 一遍又一遍地写相同的代码 再次,同时使用 webservice你写了一次代码, 然后在多个位置使用它。 易于维护,代码更少 写。
  • 可维护性(这与...有关) 以上几点)所有的 与交换数据相关的代码是 所有在一个位置(您的网络服务)

可能还有更多。就像设计时支持/代码完成一样。

答案 3 :(得分:0)

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

同样使用表单发布方法,您必须伪造表单提交,这不像进行Web服务调用那样整洁。

你的第三种方式是让数据库说话,虽然我猜他们是不同的,不能互相“看见”?

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我同意AlexanderJohannesen的说法,SOAP webservices或RESTful apis是否更好是有争议的,但是如果两个站点都在你的控制之下并且完成了asp.net,那么肯定会使用SOAP webservices。 Visual Studio为创建和使用Web服务提供的工具非常棒,在两个站点之间创建链接所需的时间不会超过几分钟。

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

[WebMethod]
public void AddComment(int UserId, string Comment) {
  // do stuff
}

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

现在在消费方面(www.myweb1.com),选择Add Web Reference,将url指向我们刚创建的webservice的地址,为其命名并单击Add refence。您有一个代理类,您可以像本地类一样调用它。很容易就是馅饼。