Web服务与表单提交的区别

3
我有两个网站(www.mysite1.com和myweb2.com),这两个网站都是使用ASP.NET开发,后端数据库是SQL Server。我想要从一个网站向另一个网站传递数据。现在我很困惑,不知道是使用Web服务还是表单提交(从mysite1到myweb2的页面)。请问有人可以告诉我两种方法的优缺点吗?
6个回答

5
我假设您所说的Web服务是基于SOAP的Web服务?
无论哪种方式都有一些优点。POST更轻量级,而SOAP则是标准化的(在某种程度上)。我会选择更符合RESTful风格的方法,因为我认为对于简单的任务来说,SOAP过于繁琐,而且并没有太多的优势。

3

Webservices是SOAP消息(SOAP协议使用XML来传递消息),因此你的服务器两端都必须理解SOAP和你想要在它们之间讨论的任何扩展,并且它们可能(但不一定)能够理解WMDL文件(这“解释”了可用的各种服务端点和远程功能)。通常我们称其为SOAP/WS-*堆栈,重点在于“堆栈”,因为需要有几个软件部件可用,而SOAP调用越复杂,就需要更多的堆栈部件可用和维护。

另一方面,使用POST主要与RESTful行为相关联,HTTP协议是这种协议的一个例子。在POST内部,当然可以发布复杂的XML,但人们倾向于使用简单的POST来简化调用,并使用HTTP响应作为回复。您可能不需要任何额外的软件,因为大多数Webkit都支持HTTP。如果您好奇,我的偏见倾向于REST。通过使用HATEOAS,您可以为自我感知系统创建真正良好的基础设施,以实时方式根据负载和可用性进行自我修改,而不是SOAP方式。这是支持REST的中心论点;HTTP是面向大型分布式网络设计的,处理性能和稳定性。SOAP往往是一种一站式解决方案,如果出现故障,您就会遇到困难。(再次提醒我的偏见。我在我的博客上写了很多关于此的内容,特别是架构方面SOA与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-*堆栈),另一种则更轻量级且已经得到支持。其余的就像他们所说的那样,只是胶水。


1

我认为Web服务绝对是最佳选择。以下是一些优点:

  • 如果将来需要添加另一个网站,您的基础设施(Web服务)已经存在。
  • 当使用cookie或可能触发浏览器隐私限制时,跨站点表单提交可能会导致问题。
  • 如果使用表单提交,您必须一遍又一遍地编写相同的代码,而使用Web服务只需编写一次代码,然后在多个位置使用。易于维护,减少编码量。
  • 可维护性(与上述观点相关)。与交换数据相关的所有代码都在一个位置(您的Web服务)。

这里可能还有更多优点,例如设计时支持/代码完成。


0

从我的一点经验来看,我认为最好使用 Web 服务,因为您可以在代码中查看服务的方法和结构,一旦您在接收端创建了它。

此外,使用表单提交方法意味着您必须伪造表单提交,这不如进行 Web 服务调用简洁。

第三种方法是让数据库交流,但我猜想它们是不同的,无法相互“看到”?


没有必要伪造表单提交。表单提交只是一种POST方法。在.NET中,使用HTTPWebRequest类(http://www.netomatix.com/httppostdata.aspx)发送POST和GET方法同样容易。 - Sergej Andrejev
抱歉,我的表达不够清晰。我更想说的是,如果使用SOAP,你需要构造要发送的帖子数据,而不是使用定义好参数的简便方法。 - Beanie

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

0

我同意AlexanderJohannesen的观点,SOAP Web服务和RESTful API哪个更好还有待商榷,但是如果两个站点都在您的控制下并且使用asp.net完成,则一定要选择SOAP Web服务。Visual Studio提供的创建和使用Web服务的工具非常棒,您只需要几分钟就可以创建两个站点之间的链接。

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

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

将其部署在测试服务器上,例如tst.myweb2.com。

现在在消费方面(www.myweb1.com),选择添加Web引用,将URL指向我们刚刚创建的Web服务的地址,给它一个名称并单击添加引用。您将拥有一个代理类,可以像本地类一样调用它。简单易行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接