2013-10-03 1 views
3

Следующий код возвращает ошибку в приложениях WinForms и Windows Phone 8.WebRequest Not Working

Код

var jsonData = "jsonStringGoesHere"; 
    var uri = new Uri("urlGoesHere"); 
    var webRequest = (HttpWebRequest)WebRequest.Create(uri); 
    webRequest.Method = "POST"; 
    webRequest.ContentType = "application/json"; 
    webRequest.ContentLength = jsonData.Length; 
    webRequest.BeginGetRequestStream(ar => 
    { 
     try 
     { 
      using (var os = webRequest.EndGetRequestStream(ar)) 
      { 
       var postData = Encoding.UTF8.GetBytes(jsonData); 
       os.Write(postData, 0, postData.Length); 
      } 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine(ex); 
     } 

     webRequest.BeginGetResponse(
      ar2 => 
      { 
       try 
       { 
        using (var response = webRequest.EndGetResponse(ar2)) 
        using (var reader = new StreamReader(response.GetResponseStream())) 
        { 
         var received = reader.ReadToEnd(); 
        } 
       } 
       catch (Exception ex) 
       { 
        Debug.WriteLine(ex); 
       } 
      }, null); 
    }, null); 

Ошибка В WinForms: [System.Net.WebException] = {"The remote server returned an error: (400) Bad Request."}

В WP8 The remote server returned an error: NotFound.

Услуги WCF работают нормально, поскольку я заставил их работать в Fiddler и в других типах приложений, таких как Android/iPhone.

Почему это не будет работать?

+1

Ваш сервер вам не нравится. Сравните запросы в Fiddler. – SLaks

+0

Я по сравнению. Они точно такие же. – Subby

+0

WHYYYYY НЕ НАСТОЯЩАЯ РАБОТА: (: (: (: (: ((: – Subby

ответ

0

Если я правильно помню, я думаю, что сталкивался с чем-то похожим. Я думал, что это связано с ContentLength, но я действительно не помню.

Вот код, который я в конечном итоге использовал. Не уверен, что это помогает.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
request.Method = "POST"; 
request.ContentType = "application/json"; 
string json = BuildJSON(TestConvert(tests)); 
var enc = new UTF8Encoding(false); 
request.ContentLength = enc.GetByteCount(json); 
using (StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), enc)) 
{ 
    requestWriter.Write(json); 
    requestWriter.Close(); 
} 
+0

Я не могу этого сделать. 'GetRequestStream()' не является частью WP8/Silverlight. Я могу использовать BeginGetRequestStream, что и я я использую. – Subby

+1

Я в основном отправлял его для 'var enc = new UTF8Encoding (false); webRequest.ContentLength = enc.GetByteCount (jsonData);' Должен был сузить его извините. – jones6