Xamarin's first official Mono release came out earlier this month with many bug fixes, OS X Lion support, a “vastly improved WCF stack”, and better debugging support. The version number is 2.10.3, which makes it a short-term support release. Those who desire a long term commitment to support should stay with the 2.6 series until Mono 3 is ready.
The bug fixes cover a wide gambit including the C# compiler, the JIT compiler, WCF, ASP.NET, OS X, and ADO.NET. The full list is available in the release notes. While there were also new features in most of these categories, by far the biggest winner is WCF with the following features:
- Support WebHttpBinding configuration
- Implement support for Stream param with WebHttpBinding raw content format
- Implement support for generic data contract type name with "{x}"
- Implement XmlSerializerMessageContractImporter
- Implement WsdlContractConversionContext
- Properly implement Message.ToString() + all related changes
- Add message buffer support for RawMessage
- Optimization: Full equivalence comparison is unnecessary for MessageEncoder ContentType
- Allow DocumentType in ImportNode()
- Add Decimal support to XmlBinaryDictionaryReader
It should be noted that Mono still supports only a very small subset of the WCF stack. Xamarin's current plan is only to support those features that are also available in the Silverlight runtime. The size of the full WCF stack makes implementing it completely untenable without corporate support. Another possibility, though unlikely, is that Microsoft open sources the WCF stack in the same fashion that they open sourced the ASP.NET MVC stack.
Speaking of ASP.NET, below are some of the features that made it into this release. It should be noted that support for Web Forms has always been on shaky ground, both legally and from a long-term commitment, and those wishing to use Linux as a web server should strongly consider focusing on ASP.NET MVC.
- Added support for optional parameters to WebServices
- Added FormsAuthentication.Timeout 4.0 property
- Support RemoteEndpointMessageProperty
- Implemented composite scripts support in System.Web.Extensions
A lot of changes have been made to help with debugging too.
- If a thread abort is fatal, we now show the stack trace
- Improve stacktraces when facing a runtime invoke wrapper.
- Add socket timeouts to the soft debugger
- New MONO_WCF_TRACE variable allows debugging WCF by logging all of the requests
- Inform user about all exceptions thrown during HttpRuntime static initialization
- OS X: We now ship with debugging symbols for all of the Mono binaries, making it simpler to get good stack traces.
In related news, Mono’s C# 5 compiler is currently on par with the last public release from Microsoft. Both companies are having trouble with some of the more complex scenarios dealing with expressions and their respective teams are in contact with each other. More information is available in the Q&A session recorded at Monospace.