Веб-клиент Silverlight не подключается к моему серверу
-
22-07-2019 - |
Вопрос
У меня тут проблема.
У меня есть сайт 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.