设计可互操作的Web服务

时间:2010-05-04 21:47:17

标签: web-services interop xsd wsdl

我正在设计一组Web服务,以允许我们的客户从他们的应用程序连接到我们的系统之一。我们的客户的应用程序是在各种框架(.NET,Java,PHP,Python甚至偶尔的所有JS应用程序)中开发的,所以显然WS是可行的方式。

研究一下真正的互操作WS我发现要走的路是首先设计WSDL和XSD并从那里派生实现。

如果真的要走的话,我真正需要的是指导。我已经读过WCF创建了可互操作的WS,但我不是MS的粉丝创建标准的东西。

我应该使用WCF还是有一套很好的工具来设计WSDL和XSD而没有我期待的痛苦。

提前致谢

4 个答案:

答案 0 :(得分:1)

如果您想与JavaScript进行互操作,那么最好制作更多REST风格的API。这基本上只是标准的HTTP调用,因此您可以从一开始就可以互操作。但是,你有点表示你想使用SOAP,所以......

如果您正在使用SOAP / WSDL,我肯定会提倡使用服务器平台 - 是的,甚至是.NET - 来生成WSDL,然后只需检查您正在使用的选项是否产生了良好的,可互操作的WSDL。

我是一名有PHP和PHP历史的Java开发人员。 Perl,我在硬件的两面(作为服务器和客户端)与许多WS项目上的.Net进行了互操作。通常没有重大问题 - 只要警惕几件事情:

  • MS的某些专有元素 融入开放标准。对于 例如,他们可能会提供NTLM风格 身份验证,实际上不是 在大多数用例中需要, 特别是在使用SSL时 证书。
  • SOAP已经采取了一些措施 多年来形式各异 (Document / Literal,RPC / Encoded,......) 你可能会发现你不需要 担心这个,如RPC / Encoded 与旧框架一起死亡,并且 大多数现代框架倾向于 文件/文字
  • SOAP提供了一些 螺栓固定标准(例如MTOM和DIME 用于附件,SOAP-WS用于 认证)。尽量避免这些 螺栓固定,作为不同的平台 实现不同的子集。
  • 为安全起见,我建议使用SSL 信任与机密,然后 HTTP基本身份验证,或只是自定义 soap请求定义中的字符串标记。

尽可能保持WSDL尽可能小,尝试在流程的早期进行互操作,并且不应该有太多问题

答案 1 :(得分:1)

您可以使用WCF 合同优先开发。

如果主要关注互操作性,那么我建议使用WCF来提供服务实现,而不是依靠WCF生成服务接口以使用契约优先开发来为接口建模。

关于如何开发这种方式的一篇非常好的文章是Schema-based Development with Windows Communication Foundation

如果要打开自己的WSDL和模式,可能需要获得像XmlSpy或LiquidXml这样的编辑器。我喜欢LiquidXML的价格(免费!),但我不记得你是否需要为网络服务功能付费。

使用Visual Studio和WCF进行契约优先开发的另一个有趣工具是WSCF.blue。我没有使用过它,但它看起来似乎是基于WCSF.blue roadmap积极开发的。

答案 2 :(得分:0)

WSDL和XSD是独立于语言的,您只需要有一些使用其他语言进行通信的机制。你要做的好事是IMHO核心数据设计,所以对于相同的数据实体你不需要那么多的XSD。

答案 3 :(得分:0)

当你问“我应该使用WCF”时,我不确定你的意思吗? WCF是在.NET上开发Web服务(和其他类型的通信服务)的当前机制。目前没有其他机制。其他的已经过时,或者被认为是“遗留技术”。