【问题标题】:Restful wcf Service error 'Unable to deserialize XML body with root nameRestful wcf服务错误'无法反序列化具有根名称的XML正文
【发布时间】:2012-02-14 12:23:02
【问题描述】:

我为手机应用编写了一个 RESFful 服务。 我不确定我做错了什么?我尝试使用多种内容类型设置对其进行测试,但没有运气。 来自手机应用程序的数据以以下格式编码。 PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiPjxzYW1scDpTdGF0dXM + PHNhbWxwOlN0YXR1c0NvZGU + aGVyVmFsdWU + PC94ZW5jOkNpcGhlckRhdGE + PC94ZW5jOkVuY3J5cHRlZERhdGE + PC9zYW1sOkVuY3J5cHRlZEFzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg ==“; P>

这是界面中的定义:

[OperationContract]
    [WebInvoke]
    String GetUserInfo(String authenticateRequest);

我收到错误:使用以下测试代码。

'无法使用 DataContractSerializer 反序列化具有根名称'Binary'和根命名空间''(用于操作'GetMobileCheckCapture'和合同('IMobileCC','http://tempuri.org/'))的 XML 主体

这就是我尝试测试服务的方式: 字符串加密SAML =

PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiPjxzYW1scDpTdGF0dXM + PHNhbWxwOlN0YXR1c0NvZGU + aGVyVmFsdWU + PC94ZW5jOkNpcGhlckRhdGE + PC94ZW5jOkVuY3J5cHRlZERhdGE + PC9zYW1sOkVuY3J5cHRlZEFzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg ==“; P>

 HttpWebRequest req = WebRequest.Create("http://localhost/Services/Mservice.svc/GetUserInfo") as HttpWebRequest;
            req.KeepAlive = false;
            req.Method = "POST";
            req.ContentType = "text/xml; encoding='utf-8'";
              ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] bDataToPass = encoding.GetBytes(encryptedSAML);
            req.ContentLength = bDataToPass.Length;

        using (Stream dataStream = req.GetRequestStream())
        {
            dataStream.Write(bDataToPass, 0, bDataToPass.Length);
        }

        try
        {
            using (WebResponse webresponse = req.GetResponse())
            {
                StreamReader reader = null;
                string responses = "";

                string StatusDescription = ((HttpWebResponse)webresponse).StatusDescription;

                if (((HttpWebResponse)webresponse).StatusCode != HttpStatusCode.OK)
                {
                    // Console.Write();
                }
                reader = new StreamReader(webresponse.GetResponseStream());
                responses = reader.ReadToEnd();
                XmlDocument xmldoc = new XmlDocument();
                xmldoc.LoadXml(responses.Replace("&", "&"));
                response = xmldoc;
            }
        }
        catch (WebException e)
        {
            using (WebResponse response2 = e.Response)
            {
                HttpWebResponse httpResponse = (HttpWebResponse)response2;
                Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
                using (Stream data = response2.GetResponseStream())
                {
                    string text = new StreamReader(data).ReadToEnd();
                    Console.WriteLine(text);
                }
            }
        } 

【问题讨论】:

  • 那个字符串看起来是 Base64 编码的。
  • 是的,这是正确的,但参数是这种格式的预期我在 wcf 级别的处理中进行解码,但我无法对其进行测试。

标签: c# .net wcf rest


【解决方案1】:

您是否尝试过使用 UTF-8 编码而不是 ASCII?

 HttpWebRequest req = WebRequest.Create("http://localhost/Services/Mservice.svc/GetUserInfo") as HttpWebRequest;
            req.KeepAlive = false;
            req.Method = "POST";
            req.ContentType = "text/xml; encoding='utf-8'";
              UTF8Encoding encoding = new UTF8Encoding();
            byte[] bDataToPass = encoding.GetBytes(encryptedSAML);
            req.ContentLength = bDataToPass.Length;

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多