вызов внешних сайтов из silverlight - PullRequest
1 голос
/ 14 февраля 2010

Я пишу небольшое приложение Silverlight, чтобы попробовать Silverlight. Моя идея - сделать небольшое приложение, которое проверяет, работают ли веб-сайты. Он работает, когда пользователь вводит URL, а мое приложение проверяет его работоспособность каждые 5 минут.

Но когда я делаю веб-запрос, я получаю исключение безопасности ниже. Чтение 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: ошибка безопасности. в System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) в System.Net.Browser.BrowserHttpWebRequest. <> c__DisplayClass5.b__4 (объект sendState) в System.Net.Browser.AsyncHelper. <> c__DisplayClass2.b__0 (объект sendState) --- Конец внутренней трассировки стека исключений --- в System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, состояние объекта) в System.Net.Browser.BrowserHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) at monitor.Home.doCheck (IAsyncResult a)}

Ответы [ 4 ]

3 голосов
/ 14 февраля 2010

Вы не можете переопределить междоменную политику сервера в Silverlight 3. В Silverlight 4 вы можете это сделать с помощью доверенного приложения «вне браузера».

Лучше всего создать службу, работающую в том же домене, что и домен, на котором размещено приложение Silverlight, и заставить его выполнять проверки.

0 голосов
/ 14 февраля 2010

Полагаю, целевому URI нужен файл clientaccesspolicy.xml или crossdomain.xml в корневом каталоге. Решением может быть создание службы WCF, расположенной на вашем сервере, которая обрабатывает запрос.

0 голосов
/ 14 февраля 2010

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

0 голосов
/ 14 февраля 2010

Вы можете создать серверную страницу в ASP.Net, которая подключается к любому веб-сайту и сообщает, работает ли он.
Поскольку он будет размещен в том же домене, что и ваше приложение Silverlight, он будет работать нормально. (ASP.Net не имеет таких ограничений)

Обратите внимание, что тогда он будет проверять, может ли сервер подключаться к веб-сайту, а не к клиенту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...