2010-02-14 106 views
1

我正在寫一個小的silverlight應用程序來試試silverlight。我的想法是製作一個小應用程序,檢查網站是否在線。它通過用戶輸入一個URL來工作,我的應用程序每5分鐘檢查一次它的正常運行時間。從silverlight呼叫外部網站

但是,當我做網絡請求時,我會得到下面的安全例外。閱讀http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest(VS.95).aspx它似乎表明silverlight不允許跨域連接。那麼沒有辦法讓我的想法在silverlight中工作嗎?

示例代碼:

 WebRequest testHTTP = null; 
      try 
      { 
       testHTTP = WebRequest.Create(serverToCheck); 
      } 
      catch (UriFormatException ufe) 
      { 
       try 
       { 
        testHTTP = WebRequest.Create("http://" + serverToCheck); 
       } 
       catch (UriFormatException ufe1) 
       { 
        MessageBox.Show("Invalid server address"); 

       } 
      } 
      if (testHTTP != null) 
      { 
       testHTTP.BeginGetResponse(new AsyncCallback(doCheck), testHTTP); 

       } 

    void doCheck(IAsyncResult a) 
    { 
     try 
     { 
      HttpWebRequest req = (HttpWebRequest)a.AsyncState; 
      HttpWebResponse res = (HttpWebResponse)req.EndGetResponse(a); 

      Dispatcher.BeginInvoke(() => HTTPStatus.Content = "OK"); 

     } 
     catch (Exception ex) 
     { 
    //handle exception 
     } 

    } 

異常: {System.Security.SecurityException ---> System.Security.SecurityException:安全錯誤。 at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) at System.Net.Browser.BrowserHttpWebRequest。 <> c__DisplayClass5.b__4(Object sendState) at System.Net.Browser.AsyncHelper。 <> c__DisplayClass2.b__0(Object sendState) --- End of internal exception stack trace --- at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,Object state) at System.Net.Browser.BrowserHttpWebRequest。 EndGetResponse(IAsyncResult asyncResult) at monitor.Home.doCheck(IAsyncResult a)}

回答

3

您無法在Silverlight 3中覆蓋服務器的跨域策略。在Silverlight 4中,您可以使用受信任的「瀏覽器外」應用程序。

最好的辦法是創建一個與託管Silverlight應用程序的服務在同一個域上運行的服務,並讓它執行檢查。

0

您可以在ASP.Net中創建一個連接到任何網站的服務器端頁面,並告訴您它是否已啓動。
由於它將與您的Silverlight應用程序位於同一個域中,因此它可以正常工作。 (ASP.Net沒有這種限制)

請注意,它會檢查服務器是否可以連接到網站而不是客戶端。

0

您嘗試訪問的站點要求使用跨域策略文件以允許訪問。仲裁站點不可能有這些,所以你試圖做的事情被阻止。

0

我猜目標URI需要在​​根目錄中有一個clientaccesspolicy.xml或crossdomain.xml文件。解決方案可能是在處理請求的服務器上創建一個WCF服務。