我想写一个Web服务规范,这需要取决于方法是否成功完成不同的响应主体。我曾尝试创建两个不同的DataContract类,但是如何返回它们并让它们正确序列化?有没有办法从WCF REST方法返回不同类型?
回答
答案是肯定的但它是棘手的,你在界面上失去了强类型。如果你返回一个流那么数据可以是XML,文本,甚至二进制图像。对于DataContract类,您可以使用DataContractSerializer对数据进行序列化。
见BlogSvc和更具体的RestAtomPubService.cs WCF service了解更多详情。请注意,该源代码还将向您展示如何将不同类型的数据接受到需要内容类型映射器的WCF休息方法中。
如果您使用的是基于绑定一个XML,那么我相信是没有办法做到这一点。在这种情况下,一个简单的解决方案就是在出现故障时只需要部分消息标志,并在需要时将故障信息存储在某处。对于JSON绑定,您可以使用返回对象的方法,然后返回两种不同类型的对象。如果我没有记错(这很少见),这是可能的,因为如果对象没有序列化属性,JavaScriptSerializer类会使用反射。
最好的方式来表明你的WCF Web服务失败将抛出一个FaultException异常。服务web.config文件中有一些设置可以将整个错误消息作为错误的一部分传递给客户端。
另一种方法可能是从同一个基类或接口同时继承你的结果。该服务将返回基本类型的一个实例。然后,您可以使用KnownType属性通知客户端可能会返回多个类型。想想看,它可能会使用Object作为基本类型,但我没有尝试过。
失败或者这些方法,你可以创建包含结果和错误性质和你的客户,然后可以决定采取哪种行动的自定义结果对象。我必须使用Silverlight 2的这种方法,因为Beta 2尚未完全支持错误合约。这不是很好,我通常不会推荐它,但如果它是唯一可行的方法,或者您认为这是您的最佳方法...
如果您在使用ADO.NET数据服务时遇到麻烦,我在那里的经验较少。
Here's some information上实现FaultContracts
- 1. 有没有办法从方法返回匿名类型?
- 2. PHP:有没有办法获得方法的返回类型?
- 3. 没有返回类型的方法: - ()foo
- 4. 从C#方法返回不同类型
- 5. 有没有办法在第三方类型上创建WCF DataContract?
- 6. 有没有办法在javascript中获取返回值的类型?
- 7. Java:有没有办法在枚举中获得不同返回类型的方法?
- 8. 有没有办法让pycorenlp的`nlp.annotate()`总是返回相同类型的结果?
- 9. 有没有办法在Java中说“方法返回这个”?
- 10. 有没有办法让YQL返回HTML?
- 11. 有没有办法使用具有相同名称但返回类型不同的函数?
- 12. 带有不同签名和返回类型的方法重载
- 13. 重载方法可能有不同的返回类型吗?
- 14. 静态类方法没有返回值
- 15. fieldValue方法没有返回
- 16. 有没有解决方法来从forEach方法“返回”流?
- 17. 从Java界面中的相同方法返回不同类型
- 18. 有没有办法从ExternalInterface调用Javascript类方法?
- 19. 有没有办法强制不同设备的不同方向?
- 20. iphone方法返回NSString没有返回
- 21. 如何使用从不同方法返回的类型调用泛型方法?
- 22. 从泛型方法返回类型
- 23. 从java方法返回泛型类型
- 24. 有没有办法在Textmate中从方法跳转到方法?
- 25. 有没有办法减少WCF带宽?
- 26. 有没有办法轮询从subprocess.Popen返回的文件句柄?
- 27. 有没有办法从Python返回一个数据框到R?
- 28. 有没有办法从背景返回时总是使用default.png?
- 29. 有没有办法从SQL查询返回绑定结果?
- 30. 有没有办法将SearchQuerySet转换为object.filter返回的类型? -Django
我没有在源文件中找到该文件(RestAtomPubService.cs),我错过了它还是被删除了?谢谢。 – 2009-06-26 12:15:02