2012-02-14 63 views
0

我已經爲電話應用程序編寫了RESFful服務。 我不確定我做錯了什麼?我試圖用多種內容類型設置來測試它,但沒有運氣。 來自手機應用程序的數據即將以以下格式編碼。 PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiPjxzYW1scDpTdGF0dXM + PHNhbWxwOlN0YXR1c0NvZGU + aGVyVmFsdWU + PC94ZW5jOkNpcGhlckRhdGE + PC94ZW5jOkVuY3J5cHRlZERhdGE + PC9zYW1sOkVuY3J5cHRlZEFzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg ==「;Restful wcf服務錯誤'無法使用根名稱反序列化XML正文

這是接口的定義:

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

我得到錯誤:與下面的測試代碼

「無法。使用根名'Binary'和根名稱空間''(用於操作'GetMobileCheckCapture'和契約('IMobileCC','http://tempuri.org/'))來反序列化XML主體usin摹的DataContractSerializer

這是我正在試圖測試服務: 字符串encryptedSAML =

PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiPjxzYW1scDpTdGF0dXM + PHNhbWxwOlN0YXR1c0NvZGU + aGVyVmFsdWU + PC94ZW5jOkNpcGhlckRhdGE + PC94ZW5jOkVuY3J5cHRlZERhdGE + PC9zYW1sOkVuY3J5cHRlZEFzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg ==「;

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); 
       } 
      } 
     } 
+0

該字符串看起來是Base64編碼的。 – 2012-02-14 12:42:37

+0

是的,這是正確的,但參數預計在這種格式我在wcf級別的處理解碼,但我無法測試它。 – user228777 2012-02-14 12:48:23

回答

0

您是否嘗試過使用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; 
+0

是的嘗試了你的建議方式,還是一樣的錯誤。 – user228777 2012-02-14 13:25:08