【发布时间】:2009-04-28 11:53:27
【问题描述】:
我有 2 个网站(www.mysite1.com 和 myweb2.com,这两个网站都在 ASP.NET 中,以 SQL 服务器作为后端),我想将数据从一个站点传递到另一个站点。现在我很困惑是否使用网络服务或表单发布(从 mysite1 到 myweb2 中的页面)
谁能告诉我两者的优缺点?
【问题讨论】:
标签: web-services
我有 2 个网站(www.mysite1.com 和 myweb2.com,这两个网站都在 ASP.NET 中,以 SQL 服务器作为后端),我想将数据从一个站点传递到另一个站点。现在我很困惑是否使用网络服务或表单发布(从 mysite1 到 myweb2 中的页面)
谁能告诉我两者的优缺点?
【问题讨论】:
标签: web-services
我假设您的网络服务是指基于 SOAP 的网络服务?
无论如何,两者都是平等的,但优势很少。发布更轻量级,而 SOAP 是标准化的(有点)。我会选择更安静的方法,因为我认为 SOAP 对于简单任务来说开销太大,而没有提供太多优势。
【讨论】:
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 side 和impact 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-* 堆栈),具体取决于您的需求,另一个更轻量级并且已经受支持。正如他们所说,剩下的就是胶水。
【讨论】:
我会说网络服务绝对是最好的选择。一些专业人士:
可能还有更多。比如设计时支持/代码完成。
【讨论】:
根据我的小经验,我会说您最好使用 Web 服务,因为您可以在代码中看到服务的方法和结构,一旦您在接收端创建了它。
如果使用表单发布方法,您将不得不伪造表单提交,这不像进行 Web 服务调用那样简洁。
您的第三种方法是让数据库说话,尽管我猜它们是不同的并且不能“看到”彼此?
【讨论】:
我建议使用 Web 服务(或 WCF)。正如 Beanie 所说,通过服务,您可以看到(您公开的)服务的方法和类型,这将使数据移动更加容易和清洁。
【讨论】:
我同意 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 服务的地址,为其命名并单击添加引用。你有一个代理类,你可以像本地类一样调用它。很简单。
【讨论】: