Вызов веб-службы Silverlight работает в Studio, но не работает при запуске с веб-сайта. - PullRequest
4 голосов
/ 24 февраля 2011

Мы создаем приложение Silverlight и обращаемся к службе Silverlight-WCF.При запуске приложения из Visual Studio все работает отлично.Когда мы выполняем развертывание на веб-сайте и запускаем приложение, мы каждый раз при обращении к веб-сервису получаем следующую (или очень похожую) ошибку.

Message: Unhandled Error in Silverlight Application An exception occurred during the operation, making the result invalid.  Check InnerException for exception details.   at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
   at SSS.MVVMCore.Silverlight.WebPortalService.GetThemeIdCompletedEventArgs.get_Result()
   at SSS.MVVMCore.Silverlight.ViewModels.StandardBaseFrameViewModel.<.ctor>b__0(Object s, GetThemeIdCompletedEventArgs ea)
   at SSS.MVVMCore.Silverlight.WebPortalService.WebPortalServiceClient.OnGetThemeIdCompleted(Object state)
Line: 1
Char: 1
Code: 0
URI: http://ssswebportal.com/login.aspx?p=d53ae99b-06a0-4ba7-81ed-4556adc532b2

На основании сообщения вызывается служба:выполняется полностью, но когда он пытается десериализовать результаты обратно в приложении Silverlight, что-то идет не так.Есть предложения относительно того, что происходит и что мы можем сделать, чтобы это исправить?

<<<<<<<<<<<<<<<<<<<<<<<<<<<< СЛЕДУЙТЕ ЗА >>>>>>>>>>>>>>>>>>>>>>>>>>>>

Это было наше решение:

В файле ServiceReferences.ClientConfig у нас был следующий код:

<client>
  <endpoint address="http://localhost:5482/WebPortalService.svc"
      binding="customBinding" bindingConfiguration="CustomBinding_WebPortalService"
      contract="WebPortalService.WebPortalService" name="CustomBinding_WebPortalService" />
</client>

Обратите внимание на строку 'localhost'.Это должен быть адрес нашего веб-сервера, когда мы публикуем, но он должен быть локальным при разработке.

У кого-нибудь есть предложения о том, как сделать это автоматически, чтобы нам не приходилось вручную изменять эту строку перед каждой публикацией?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Есть две вещи, которые вам нужно сделать.

Во-первых, предоставьте файлы clientaccesspolicy.xml и / или crossdomain.xml на веб-сайте. Эта статья MSDN содержит подробности.Я также нашел эту запись в блоге полезной.

Во-вторых, убедитесь, что ваши конечные точки ссылки на службу указывают на правильный URL.Для моих проектов у меня есть разные конфигурации сборки (Release, Debug, Test, Beta и т. Д.) И несколько конечных точек.Затем я выбираю соответствующую конечную точку, используя в своем коде директивы #if.

Например:

    soapClient =
#if DEBUG
        new MySoapClient("DebugService");
#elif TESTRELEASE
        new MySoapClient("TestService");
#elif BETA
        new MySoapClient("BetaService");
#else
        new MySoapClient("ReleaseService");
#endif
0 голосов
/ 24 февраля 2011

Обычно это происходит, когда служба WCF развернута в другом домене относительно местоположения приложения.Если это временная ситуация, решение проблемы с обслуживанием и приложением в одном домене.Если это невозможно, можно создать прокси для удаленной службы в приложении.

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