CommunicationException при асинхронном обратном вызове для веб-службы, вызываемой из приложения Silverlight - PullRequest
1 голос
/ 20 января 2009

Я работаю с другим программистом на веб-сайте, который обращается к SQL Server (2008 Express) через некоторые веб-службы, которые он создал (включая в основном LINQ to SQL), а пользовательский интерфейс находится в Silverlight. Я работал над другой частью системы, но только что получил его последний код и пытаюсь запустить его на своем компьютере, но получаю сообщение об ошибке.

Это CommunicationException в строке в файле reference.cs, метод EndXXX веб-службы:

// This is for a Ping method we created just to trouble shoot- it behaves the same.
public string EndPing(System.IAsyncResult result) {

    object[] _args = new object[0];

    // Next line throws Communication Exception
    string _result = ((string)(base.EndInvoke("Ping", _args, result)));
    return _result;
}

Сообщение об ошибке:

"Произошла ошибка при попытке сделать запрос к URI 'http://localhost:1233/SummitService.svc'. Это может быть связано с попыткой доступа к услуге междоменным способом без соответствующей междоменной политики или политика, которая не подходит для служб SOAP. Вам может потребоваться связаться с владельцем службы, чтобы опубликовать файл междоменной политики и убедиться, что он позволяет отправлять связанные с SOAP заголовки HTTP. Дополнительные сведения см. во внутреннем исключении. "

Весь стек находится на моем локальном компьютере, поэтому мне не нужно делать какие-либо междоменные вызовы. Мы просмотрели весь код конфигурации, который смогли найти (web.config, ServiceReferences.ClientConfig), чтобы изменить все ссылки на его компьютер на мой. Мы оба довольно новы во всех этих технологиях, поэтому мы дошли до конца наших знаний.

Это звонит в колокола для кого-нибудь?


ОБНОВЛЕНИЕ

Итак, я выполнил некоторые задачи по устранению неполадок и обнаружил, что если я введу адрес локального хоста страницы aspx, которая запускает все это, она загружается нормально, и я вижу данные из веб-службы на странице. Только когда я отлаживаю, я получаю эту ошибку.

Я также заметил, что когда я пытаюсь отладить страницу, она загружает местоположение файла - D: \ projects \ etc - в браузер, а не через localhost. И на самом деле он загружает тестовую страницу .html в проект, хотя я установил страницу .aspx в качестве начальной страницы.

Так что, похоже, что-то связано с настройками проекта или настройками VS2008, а не с проблемой конфигурации, как я сначала предполагал. У кого-нибудь есть еще предложения?

Ответы [ 3 ]

1 голос
/ 29 января 2009

Хорошо, поэтому я чувствую себя немного глупо.

После того, как я несколько минут бился головой об эту штуку, я обнаружил, что в качестве стартового проекта установлен проект Silverlight. Мне нужно было, чтобы это был веб-проект, который на самом деле имел надлежащие параметры аутентификации для подключения к базе данных - не говоря уже о реальной ASPX-странице хоста, которую я продолжал устанавливать в качестве стартовой страницы, и удивлялся, почему она не используется.

Как только я поставил правильный проект. Все было прекрасно.

0 голосов
/ 26 октября 2010

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

0 голосов
/ 22 января 2009

Возможно, проблема в том, как LINQ сериализует результаты запроса. Если он обнаруживает связи между таблицами, он отправляет их с данными в службу, но поскольку Silverlight находится в изолированной среде, он не может принимать какие-либо «разветвленные» данные.

В конструкторе LINQ попробуйте изменить режим сериализации на однонаправленный и посмотреть, работает ли он.

...