Mono WCF Rest post多参数返回错误(500)

Mono WCF Rest post多参数返回错误(500),wcf,rest,mono,Wcf,Rest,Mono,最近在linux上构建了一个RESTful WCF(CLI自托管),该程序在.NET下运行良好,但在Mono下运行失败。 严格地说,使用GET和非参数/单参数POST的函数是好的,如果POST多个参数,则返回错误500 另一个问题是,如果将无效的json传递给mono(比如,标头中没有内容类型,或者json格式无效),CLI将关闭,而不是抛出异常并继续服务,这是非常致命的 Unhandled Exception: System.Xml.XmlException: Invalid comma be

最近在linux上构建了一个RESTful WCF(CLI自托管),该程序在.NET下运行良好,但在Mono下运行失败。 严格地说,使用GET和非参数/单参数POST的函数是好的,如果POST多个参数,则返回错误500

另一个问题是,如果将无效的json传递给mono(比如,标头中没有内容类型,或者json格式无效),CLI将关闭,而不是抛出异常并继续服务,这是非常致命的

Unhandled Exception: System.Xml.XmlException: Invalid comma before an end of object (4,1)
  at System.Runtime.Serialization.Json.JsonReader.ReadContent (Boolean objectValue) [0x00000] in <filename unknown>:0 
实施

 [ServiceBehavior]   
    public class MyService:IMyService
    {

        public bool Ping()
        {
            return true;
        }

        public string Echo(string name, string say)
        {
            return name + " says: " + say;
        }
    }
提琴杆

User-Agent: Fiddler
Host: 192.168.1.99:18688
Content-Length: 41
Content-Type: application/json

{
"name":"Alex",
"say":"Hello World"
}
小提琴手返回

HTTP/1.1 500 Internal Server Error
Content-Type: application/xml; charset=utf-8
Server: Mono-HTTPAPI/1.0
Date: Wed, 31 Jul 2013 04:31:20 GMT
Content-Length: 216
Connection: close

<Fault xmlns="http://schemas.microsoft.com/ws/2005/05/envelope/none"><Code><Value>Receiver</Value></Code><Reason><Text xml:lang="en-US">'Element' is an invalid node type.  Line 1, position 53.</Text></Reason></Fault>
HTTP/1.1500内部服务器错误
内容类型:application/xml;字符集=utf-8
服务器:Mono HTTPAPI/1.0
日期:2013年7月31日星期三04:31:20 GMT
内容长度:216
连接:关闭
接收器“元素”是无效的节点类型。第1行,位置53。

经过几天的搜索,这似乎是mono实现的一个缺陷。 因此,如果您陷入这种情况,一个快速的技巧是将序列化的自定义类保留为post参数,对于其他数据(如int、string、bool),使用WebInvoke.UriTemplate进行post。是的,这和你使用WebGet是一样的。 这样,当发布多个参数时,我们可以避免(-ish)这个错误。
在大多数情况下,这已经足够了。

经过几天的搜索,这似乎是mono实现的一个缺陷。 因此,如果您陷入这种情况,一个快速的技巧是将序列化的自定义类保留为post参数,对于其他数据(如int、string、bool),使用WebInvoke.UriTemplate进行post。是的,这和你使用WebGet是一样的。 这样,当发布多个参数时,我们可以避免(-ish)这个错误。
在大多数情况下,这就足够了。

仍然不知道部队接近的情况。有什么帮助吗?你能进一步解释吗?也许给我们举个例子吧?我还是不知道部队的情况。有什么帮助吗?你能进一步解释吗?也许给我们举个例子吧?对于那些参与其中的人,请参见我在将asp.net托管的WCF服务移植到mono时遇到的完全相同的问题。对于参与其中的人,请参见我在将asp.net托管的WCF服务移植到mono时遇到的完全相同的问题。
 [ServiceBehavior]   
    public class MyService:IMyService
    {

        public bool Ping()
        {
            return true;
        }

        public string Echo(string name, string say)
        {
            return name + " says: " + say;
        }
    }
User-Agent: Fiddler
Host: 192.168.1.99:18688
Content-Length: 41
Content-Type: application/json

{
"name":"Alex",
"say":"Hello World"
}
HTTP/1.1 500 Internal Server Error
Content-Type: application/xml; charset=utf-8
Server: Mono-HTTPAPI/1.0
Date: Wed, 31 Jul 2013 04:31:20 GMT
Content-Length: 216
Connection: close

<Fault xmlns="http://schemas.microsoft.com/ws/2005/05/envelope/none"><Code><Value>Receiver</Value></Code><Reason><Text xml:lang="en-US">'Element' is an invalid node type.  Line 1, position 53.</Text></Reason></Fault>