【问题标题】:Ways to make your WCF services compatible with non-.NET consumers使 WCF 服务与非 .NET 使用者兼容的方法
【发布时间】:2010-12-27 15:48:37
【问题描述】:

我正在向现有的 .NET 应用程序添加 WCF 服务层。该层将托管在 IIS 中,并由各种 UI 使用,其中至少有一个不会使用 Microsoft 技术。

我可以在 WCF 中创建一个由我的 .NET 应用程序使用的 Web 服务。但是,我担心在 .NET 世界中有效但不适用于其他技术的事物。

例如,简单地从我的 WCF 服务中抛出异常在 .NET 中就可以正常工作。但根据this article 的说法,应该使用故障合同处理异常,以确保与非.NET 使用者的兼容性。作者将这种缺乏远见标记为.NET-Only 世界的谬误

有没有人有任何关于 WCF 和非 .NET 消费者之间互操作性的高级建议或文章链接?

我意识到我可能会违反 YAGNI 原则。我只是想避免以后非 .NET 消费者的开发人员向我报告问题时难以克服的事情。

【问题讨论】:

  • 您在哪里看到了只抛出异常而不使用错误的建议?

标签: wcf web-services


【解决方案1】:
  • 使用net 开头的任何 WCF 绑定 - 避免使用 netTcp, netMsmq 等 - 仅适用于 .NET

  • 一定要善用 DataContract/DataMember 属性,这样你的方法输入和返回参数就可以很容易很好地序列化

  • 避免在您的数据合同中使用任何 .NET 特定类型 - 不要传回 Exception 或类似的东西 - 使用 SOAP(或 REST)元素代替这些内容

  • 不要使用 DataSetDataTable 等 - 它们都与 .NET 密切相关

  • 确保正确捕获服务端的所有错误 - 例如通过实现IErrorHandler - 并改为传回 SOAP 错误(如果您使用的是 SOAP 绑定)或 HTTP 错误代码(用于 REST)

  • 使用非 .NET 客户端测试您的服务!对他们运行一个 PHP 页面,用 Ruby 编写一些东西——不管怎样——测试它并确保它工作

【讨论】:

    【解决方案2】:

    一个好方法是让你的服务RESTful

    来自维基百科 - Representational State Transfer (REST) 是一种用于分布式超媒体系统(如万维网)的软件架构。

    REST 风格的 Web 服务利用 HTTP 的现有功能来公开服务。由于几乎所有构建软件的技术都可以处理 HTTP,因此您可以确保任何非 DotNet 消费者都可以使用您的 Web 服务。

    一个非常好的 RESTful 服务示例是 stackOverflow API

    这里有一些不错的链接,您可以从这里开始 -

    http://www.oracle.com/technetwork/articles/javase/index-137171.html

    http://msdn.microsoft.com/en-us/magazine/dd315413.aspx

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多