How to create a WCF service with Mono?
I have a WCF running on Windows. I'd like to deploy it - or at least test it - on a development server running SUSE and Mono.
After asking about WCF examples in Mono on the IRC channel #monodev at GimpNet I've download the examples from the olive module in the subversion.
No examples actually uses a Web.config file to create the service bus instead inherit from ServiceHost and create binding, so on, manually. Now I want to know, does Mono uses Web.config files or should I create bindings and such by hand?
Right now, running my service on MonoDevelop and hitting just http://localhost:8080/ (or http://localhost:8080/ServiceName.svc - doesn't seem to matter) gives me an error I can't identify:
Server Error in '/' Application
Value must be positive integer.
Description: HTTP 500. Error processing request.
Stack Trace:
System.ArgumentException: Value must be positive integer.
at System.Xml.XmlDictionaryReaderQuotas.Check (Int32 value) [0x0002a] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.Runtime.Serialization/System.Xml/XmlDictionaryReaderQuotas.cs:94
at System.Xml.XmlDictionaryReaderQuotas.set_MaxBytesPerRead (Int32 value) [0x00000] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.Runtime.Serialization/System.Xml/XmlDictionaryReaderQuotas.cs:69
at System.ServiceModel.Configuration.BasicHttpBindingElement.OnApplyConfiguration (System.ServiceModel.Channels.Binding binding) [0x00043] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/BasicHttpBindingElement.cs:214
at System.ServiceModel.Configuration.StandardBindingElement.ApplyConfiguration (System.ServiceModel.Channels.Binding binding) [0x00030] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/StandardBindingElement.cs:139
at System.ServiceModel.Configuration.ConfigUtil.CreateBinding (System.String binding, System.String bindingConfiguration) [0x00063] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.ServiceModel/System.ServiceModel.Configuration/ConfigUtil.cs:81
at System.ServiceModel.ServiceHostBase.ApplyConfiguration () [0x00110] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.ServiceModel/System.ServiceModel/ServiceHostBase.cs:320
at System.ServiceModel.ServiceHostBase.InitializeDescription (System.ServiceModel.UriSchemeKeyedCollection baseAddresses) [0x0001c] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.ServiceModel/System.ServiceModel/ServiceHostBase.cs:368
at System.ServiceModel.ServiceHost.InitializeDescription (System.Type serviceType, System.ServiceModel.UriSchemeKeyedCollection baseAddresses) [0x0001d] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/Syst开发者_高级运维em.ServiceModel/System.ServiceModel/ServiceHost.cs:160
at System.ServiceModel.ServiceHost..ctor (System.Type serviceType, System.Uri[] baseAddresses) [0x00006] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.ServiceModel/System.ServiceModel/ServiceHost.cs:60
at System.ServiceModel.Channels.SvcHttpHandler.EnsureServiceHost () [0x0007d] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.ServiceModel/System.ServiceModel.Channels/SvcHttpHandler.cs:207
at System.ServiceModel.Channels.SvcHttpHandler.ProcessRequest (System.Web.HttpContext context) [0x00000] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.ServiceModel/System.ServiceModel.Channels/SvcHttpHandler.cs:150
at System.Web.HttpApplication+<Pipeline>c__Iterator2.MoveNext () [0x00cdf] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.Web/System.Web/HttpApplication.cs:1362
at System.Web.HttpApplication.Tick () [0x00000] in /usr/src/packages/BUILD/mono-2.6.4/mcs/class/System.Web/System.Web/HttpApplication.cs:928
Version information: Mono Runtime Version: 2.6.4 (tarball Mon Jul 5 13:53:45 UTC 2010); ASP.NET Version: 2.0.50727.1433
Any tips on what should I do?
There has been some work on web.config support for WCF in Mono in February/March this year, judging from the mono-dev mailing list traffic, but this has not been shipped yet. You may experiment with building a development version of mono yourself (outdated guide, Mono switched to git a few days ago), or just create the biding manually. The later is certainly easier to do.
Based on the exception report, it sounds like the Mono framework is picking a negative number (-1?) as the default for values that should default to various positive numbers. I would look up the full configuration for an endpoint on MSDN, figure out the proper default values for things like Reader Quotas, and set them manually. If this resolves the problem, I would file a bug report with the Mono team, as it would seem they have a bug in that stack trace somewhere along the line.
精彩评论