2011-08-15 4 views
0

Я пытаюсь позвонить из приложения Silverlight в службу WCF, возвращая JSON. Он просто возвращает целое число. Я использовал Fiddler для проверки того, что он никогда не звонит на мой веб-сервис. Я получаю сообщение об ошибке «Операция недействительна из-за текущего состояния объекта». Это происходит на линии, HttpWebResponse response = (HttpWebResponse) _webRequest.EndGetResponse (результат); При необходимости можно предоставить Stacktrace.Ошибка при вызове WCF из приложения Silverlight с использованием HttpWebRequest

public MainPage() 
    { 
     InitializeComponent(); 

     StartWebRequest(); 
    } 

    void StartWebRequest() 
    { 
     HttpWebRequest _webRequest = (HttpWebRequest)WebRequest.Create(new Uri("http://www.example.com/MyJSON.svc/onlineusercount")); 

     _webRequest.ContentType = "text/json"; 
     _webRequest.Method = "GET"; 
     _webRequest.BeginGetResponse(FinishWebRequest, _webRequest); 
    } 

    void FinishWebRequest(IAsyncResult result) 
    { 
     HttpWebRequest _webRequest = (HttpWebRequest)result.AsyncState; 

     HttpWebResponse response = (HttpWebResponse)_webRequest.EndGetResponse(result); 
     Stream streamResponse = response.GetResponseStream(); 
     StreamReader streamRead = new StreamReader(streamResponse); 
     string responseString = streamRead.ReadToEnd(); 
     needle.Value = Convert.ToInt32(responseString); 

     // Close the stream object 
     streamResponse.Close(); 
     streamRead.Close(); 

     // Release the HttpWebResponse 
     response.Close(); 
    } 
} 

UPDATE: Я закомментирована линия выше, что говорит, говорит

_webRequest.ContentType = "text/json"; 

Моя новая ошибка: SecurityException необработанное кодом пользователя. Я считаю, что это означает, что я должен использовать try catch, но я не уверен, какой тип исключения поймать.

Мой трассировки стека выглядит следующим образом:

at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
at FuelizerGuage.MainPage.FinishWebRequest(IAsyncResult result) 
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassd.<InvokeGetResponseCallback>b__b(Object state2) 
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
at System.Threading.ThreadPoolWorkQueue.Dispatch() 
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 

Также согласно Скрипач, мое приложение Silverlight теперь делает при обращении к моему домену WebService ищет clientaccesspolicy.xml, а затем ищет crossdomain.xml, ни один из которые существуют.

ответ

0

Запросы "GET" не могут содержать заголовок Content-Type (они не могут иметь контент). Реализация HttpWebRequest в Silverlight более жесткая, чем таковая в среде рабочего стола. Попробуйте удалить линг, который определяет это свойство, и он должен работать.

Обновление: вы сталкиваетесь с проблемой междоменной работы в своем приложении. Чтобы предотвратить некоторые виды междоменных атак, SL требует, чтобы любые запросы, отправляемые в домен, отличный от того, где возникло приложение SL applicaiton (файл .xap), подвергались междоменной политике - они запрещены по умолчанию. Вы можете найти дополнительную информацию об этом на http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx.

Чтобы решить эту проблему, вам, по сути, придется добавить к своей службе междоменную политику, чтобы позволить приложениям SL потреблять ее.

+0

Я прокомментировал строку, которая устанавливает ContentType, и теперь я получаю другую ошибку. Это верхняя часть StackTrace для ошибки: System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, состояние объекта) в System.Net.Browser.BrowserHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) – puddinman13

+0

Кроме того, запрос по-прежнему не является отправляется на мой веб-сервис. Скрипач по-прежнему не показывает никаких признаков звонка. Новая ошибка возникает в ответе HttpWebResponse = (HttpWebResponse) _webRequest.EndGetReponse (результат); линия. Спасибо за ваш ответ! – puddinman13

+0

Какая ошибка вы получаете? – carlosfigueira

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