2011-08-15 82 views
0

我想從Silverlight應用程序調用返回JSON的WCF服務。它只是返回一個整數。我已經使用Fiddler來驗證它永遠不會打電話給我的web服務。我得到一個錯誤,指出「由於對象的當前狀態,操作無效」。它發生在線上,HttpWebResponse response =(HttpWebResponse)_webRequest.EndGetResponse(result);如果需要,可以提供Stacktrace。使用HttpWebRequest從Silverlight應用程序調用WCF時出現錯誤

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(); 
    } 
} 

更新:我註釋掉上面的行說

_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應用程序現在是在調用我的web服務領域進行尋找clientaccesspolicy.xml,然後查找crossdomain.xml的,沒有的存在。

回答

0

「GET」請求不能擁有Content-Type標頭(它們不能有內容)。 Silverlight中的HttpWebRequest實現比桌面框架中的更嚴格。嘗試刪除定義該屬性的ling,它應該工作。

更新:您在應用程序中遇到了跨域問題。爲了防止某些類型的跨域攻擊,SL要求任何請求發送到SL應用程序(.xap文件)所在的域以外的其他域的請求將受到跨域策略的限制 - 它們不允許使用默認。你可以在http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx找到更多關於這方面的信息。

爲了解決這個問題,你必須添加一個跨域策略到你的服務中,以允許SL應用程序使用它。

+0

我註釋掉了設置ContentType的行,現在我得到了一個不同的錯誤。這是錯誤的StackTrace的頂部:System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,Object state) at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) – puddinman13

+0

此外,請求仍然不是被髮送到我的web服務。提琴手仍然沒有顯示出正在進行的呼叫。新的錯誤發生在HttpWebResponse響應=(HttpWebResponse)_webRequest.EndGetReponse(result);線。謝謝您的回覆! – puddinman13

+0

你得到的錯誤是什麼? – carlosfigueira

相關問題