我设法获得了一个简单的 OpenRasta 示例,以 XML/JSON 提供一个简单的表示,并通过 OpenBastard.Envrionments.HttpListenerHostWithConfiguration 托管,在 Mono(2.6.3)上运行,对其(OpenRasta 的;特别是 2.0 .3000 分支)源代码。
我已经在这里为任何感兴趣的人提供了我的补丁。这些更改应该是相当不言自明的(我已包含评论),但我还将概述以下修改的原因......
OpenRasta.Diagnostics.DebuggerLoggingTraceListener 假定在由 System.Diagnostics.TraceSource 调用时将传递对 System.Diagnostics.TraceEventCache 实例的引用。这个假设适用于 .NET 框架,但 Mono 的 TraceSource 实现总是传递一个空引用。
Mono 为 OpenRasta.Hosting.AmbientContext 和 OpenRasta.Hosting.ContextScope 中引用的 System.Runtime.Remoting.Messaging.CallContext.HostContext 属性的 get 和 set 方法引发 NotImplementedException。
当与先前请求对应的 System.Net.HttpListenerResponse 对象或其基础流尚未显式关闭时,来自客户端的后续请求可能会失败。这一点我不太清楚,MSDN 文档指出必须关闭响应对象,但我遇到的问题在 .NET 框架上运行时并没有出现。
我目前正在从事一个爱好项目,该项目需要在 Mono 上设计和构建 RESTful Web 服务,我将在需要时更新补丁;希望有人会发现它有用。
免责声明:我对 OpenRasta 很陌生,对 C#/“严肃”软件开发也相对较新。除了上述之外,我还没有测试过 OpenRasta 的任何其他组件,并且单元测试继续失败;您的里程可能会有所不同。