2012-02-28 3 views
0

Хорошо, поэтому я понятия не имею, почему это не работает. Я нашел 4 разных учебника/примера для асинхронного вызова веб-службы JSON в Silverlight, и все они используют тот же формат/логику, что и я. В строке «using (streamCommunities = request.EndGetRequestStream (asyncResult))« это бросает ошибку, которую я прикрепляю внизу, ArgumentException, говорящий, что ей не нравится asyncResult. Почему это, если каждый другой пример, который я нашел, использует ту же логику?Silverlight: вызов веб-службы JSON Error

private void GetSource(object state) 
    { 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(MyValidUri)); 
    request.Method = "POST"; 
    request.ContentType = "application/json"; 
    request.BeginGetResponse(new AsyncCallback(ReadCommunityCallBack), request); 
    } 

    private void ReadCommunityCallBack(IAsyncResult asyncResult) 
    {    
     HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState; 

     using (Stream outStream = request.EndGetRequestStream(asyncResult)) 
     { 
      // DO STUFF HERE 
     } 
    } 

И ошибка здесь:

System.ArgumentException was unhandled by user code 
Message=Value does not fall within the expected range. 
    StackTrace: 
    at System.Net.Browser.ClientHttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult) 
    at cenTabbedFeed.MainPage.ReadCommunityCallBack(IAsyncResult asyncResult) 
    at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass1a.<InvokeGetResponseCallback>b__18(Object state2) 
    at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
    at System.Threading.ThreadPoolWorkQueue.Dispatch() 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 

Как я уже сказал, я обыскивал примеров и попытаться найти ответ на MSDN и я застрял и разочарование.

-Спасибо заранее RJ

+0

попытайтесь поймать исключение, поместив его в блок try/catch. Это сообщение об ошибке сообщает, что вы не заметили ошибку. Если вы его поймаете, возможно, у вас будет больше информации об этом. –

+0

Но, возможно, у вас есть дополнительная информация об этом. Проблема может быть на стороне сервера. –

+0

Это говорит мне об ошибке, которую я опубликовал ... e.Message = Значение не входит в ожидаемый диапазон. Это не решает проблему. –

ответ

1

ваш метод запроса POST, но вы ничего не пишите. Либо напишите что-нибудь в RequestStream, либо измените свой метод на GET.

--EDIT--

Вы можете оставить некоторую строку на сервер, как показано ниже

byte[] buf = Encoding.UTF8.GetBytes("key=value&key2=value2&key3=value3"); 
request.ContentType = "application/www-form-urlencoded"; 
request.ContentLength = buf.Length; 
request.GetRequestStream().Write(buf,0,buf.Length); 
+0

Итак, у меня есть пользовательский класс с данными post, как его записать в поток запросов? Класс StreamWriter и метод ToString()? –

+0

Чтобы отправить сообщение, вы должны добавить тело к запросу. Это похоже на строку запроса: key = value & key2 = value2 & key3 = value3. Рамки уже абстрагируют обработку потока для вас. –

+0

@ rjcup3, я обновил свой ответ –

0

Уве получил неправильный. Ur с использованием BeginGetResponse. У меня была такая же проблема в ACW. вместо этого он изменил его на BeginGetRequestStream).

+0

Нет, на самом деле это было потому, что я был немым и не знал, как использовать WebRequest с методом POST. BeginGetResponse - это то, что я использовал, когда закончил. Он писал в поток и пропустил состояния, в которые я возился. –

Смежные вопросы