我正在为现有的.NET应用程序添加WCF服务层。该层将托管在IIS中,并将被各种UI使用,其中至少有一个不使用Microsoft技术。
我可以在我的.NET应用程序使用的WCF中创建Web服务。但是,我关心的是在.NET世界中有效的东西,而不是其他技术。
例如,简单地从我的WCF服务中抛出异常在.NET中运行良好。但根据this article,应该使用错误契约来处理异常处理,以确保与非.NET使用者的兼容性。作者将这种缺乏远见标记为 .NET-Only World 的谬误。
有没有人有任何高级别的建议或链接到涵盖WCF和非.NET消费者之间互操作性的文章?
我意识到我可能正在反对YAGNI原则。我非常希望避免以后非.NET消费者的开发人员向我报告问题时难以克服的事情。
答案 0 :(得分:6)
使用不以net
开头的任何WCF绑定 - 避免netTcp, netMsmq
等 - 这些只是.NET
确保充分利用DataContract / DataMember属性,以便您的方法输入和返回参数可以轻松且很好地序列化
避免数据协定中的任何.NET特定类型 - 不要传回Exception
或类似的东西 - 使用SOAP(或REST)元素代替
不要使用DataSet
,DataTable
等内容 - 它们都与.NET密切相关
确保正确捕获服务端的所有错误 - 例如通过实现IErrorHandler
- 并传回SOAP错误(如果您使用的是SOAP绑定)或HTTP错误代码(用于REST)
使用非.NET客户端测试您的服务!针对它们运行PHP页面,用Ruby编写代码 - 无论如何 - 测试它并确保它有效
答案 1 :(得分: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