Вопрос

У меня тут проблема.

У меня есть сайт ASP.net хостинг-приложения Silverlight 2.Я бы хотел, чтобы сайт обменивался данными туда-сюда из приложения silverlight, и я делаю это с помощью http-запросов.Кстати, если кто-нибудь знает способ получше, пожалуйста, скажите мне.

На моем сервере настроен следующий http-прослушиватель.Я скопировал это где-то с обучающего сайта, поскольку на данный момент это в основном эксперименты :

      HttpListener listener = new HttpListener (  );
      listener.Prefixes.Add("http://localhost:4531/MyApp/");  
      listener.Start(  );                                         

      // Wait for a client request:
      HttpListenerContext context = listener.GetContext(  );

      // Respond to the request:
      string msg = "You asked for: " + context.Request.RawUrl;
      context.Response.ContentLength64 = Encoding.UTF8.GetByteCount (msg);
      context.Response.StatusCode = (int) HttpStatusCode.OK;

      using (Stream s = context.Response.OutputStream)
      using (StreamWriter writer = new StreamWriter (s))
        writer.Write (msg);

      listener.Stop(  );

Я использую следующий код для отправки запроса :

 private void MyButton_Click(object sender, RoutedEventArgs e)
        {
            Button b = sender as Button;
            b.Content = "Hello World";

            Uri serviceUri = new Uri("http://localhost:4531/MyApp/");
            WebClient downloader = new WebClient();
            downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(TestDownloadStoriesCompleted);
            downloader.DownloadStringAsync(serviceUri);

        }
        void TestDownloadStoriesCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                TextBox1.Text = e.Result;
            }
        }

Моя проблема в том, что я могу подключиться к веб-серверу из консольного приложения, используя практически тот же код (я протестировал его, установив точку останова в коде), однако ничего не происходит, когда я нажимаю кнопку в silverlight.(Я добавил "Hello World", чтобы проверить, действительно ли я подключаю делегата к кнопке.)

Я читал, что silverlight нужны политики для подключения через webclient, но этого не должно быть, если я использую один и тот же сервер и один и тот же домен как для сервера, так и для приложения silverlight!

Спасибо за все ваши ответы!

Редактировать :Я получаю это исключение :

Система.Безопасность.Исключение SecurityException ---> Система.Безопасность.Исключение SecurityException:Ошибка безопасности.

Кроме того, основываясь на том, что я чтение очевидно, что для того, чтобы быть исходным сайтом, URI развертывания xap и URI запроса также должны иметь один и тот же порт.

Однако, когда я задаю свойства для сервера, который будет размещен на определенном порту, и я настраиваю прослушиватель на прослушивание этого же порта, он завершается ошибкой с сообщением о том, что процесс не может получить доступ к файлу, поскольку он используется другим процессом.Я предполагаю, что это связано с тем, что http-прослушиватель не может прослушивать тот же порт, который используется для его размещения :| Но тогда как я могу заставить Silverlight выполнять исходные запросы webclient хоста?

Это было полезно?

Решение

Поскольку это всего лишь тест, добавьте "else TextBox1.Text=e.Error.toString();" в ваш обработчик TestDownloadStoriesCompleted, чтобы увидеть, какую ошибку вы получите.

Редактировать:

Вы не можете разместить как приложение asp.net, так и ваш прослушиватель на одном порту - вы могли бы исправить это, используя другой порт и обслуживая clientaccesspolicy.xml из вашего httplistener.

Однако я думаю, что для вас было бы разумнее взглянуть на веб-службы WCF (вы добавляете svc в свое приложение asp.net).Вот такой образец.

Другие советы

вы можете использовать такие инструменты, как http://www.fiddler2.com/fiddler2/ чтобы на самом деле увидеть, что происходит во время запроса .... Это может помочь при дальнейшей отладке ...

Сейчас я использую обработчики HTTP для связи. Кажется, что они будут работать достаточно хорошо для моей цели, хотя я все еще хочу попробовать WCF.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top