Ошибка доступа к сервису вне браузера при использовании Silverlight 4 - PullRequest
0 голосов
/ 30 ноября 2010

У меня есть приложение Silverlight 4, которое обращается к нескольким службам данных WCF.

Нет проблем при доступе к службе через браузер.

Я установил программу для запуска из-браузер с повышенным доверием.Затем я могу видеть вызовы службы WCF через fiddler, но ничего не возвращается.

Если я отлаживаю, я получаю следующую ошибку:

$exception  {System.UnauthorizedAccessException: Invalid cross-thread access.
   at MS.Internal.XcpImports.CheckThread()
   at System.Windows.Controls.ItemCollection.GetValueInternal(DependencyProperty dp)
   at System.Windows.PresentationFrameworkCollection`1.get_CountImpl()
   at System.Windows.PresentationFrameworkCollection`1.get_Count()
   at System.Windows.Controls.ItemContainerGenerator.System.Windows.Controls.Primitives.IItemContainerGenerator.RemoveAll()
   at System.Windows.Controls.ItemContainerGenerator.RemoveAll()
   at System.Windows.Controls.ItemContainerGenerator.OnRefresh()
   at System.Windows.Controls.ItemContainerGenerator.System.Windows.Controls.ICollectionChangedListener.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
   at System.Windows.Controls.WeakCollectionChangedListener.SourceCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
   at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
   at System.Windows.Controls.ItemCollection.NotifyCollectionChanged(NotifyCollectionChangedEventArgs e)
   at System.Windows.Controls.ItemCollection.System.Windows.Controls.ICollectionChangedListener.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
   at System.Windows.Controls.WeakCollectionChangedListener.SourceCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
   at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
   at System.Collections.ObjectModel.ObservableCollection`1.ClearItems()
   at System.Collections.ObjectModel.Collection`1.Clear()
   at ClientFolderExplorer.ViewModels.DocumentExplorerViewModel.clientCatalog_ClientsLoadingComplete(Object sender, ClientLoadingEventArgs e)
   at ClientFolderExplorer.Catalogs.ClientCatalog.<>c__DisplayClass3.<ExecuteClientQuery>b__2(IAsyncResult a)}  System.Exception {System.UnauthorizedAccessException}

Не знаю, с чего начать устранение неполадок,У меня есть файлы crossdomain.xml и clientaccesspolicy.xml в корне веб-сервера, но я даже не вижу, что эти файлы запрашиваются (в fiddler).

Есть идеи?

1 Ответ

0 голосов
/ 30 ноября 2010

Да - вы полагаете, что проблема связана с межсайтовым доступом, в то время как в действительности она связана с кросс- потоком доступом (первая строка ошибки указывает на это явно).

Я предполагаю, что вы пытаетесь установить свойство привязанного к данным элемента UI (или нет, не имеет значения) непосредственно из обратного вызова, обрабатывающего сервисный вызов. (редактировать) Забыл уточнить - где обратный вызов выполняется в потоке, отличном от потока пользовательского интерфейса. Silverlight, как и большинство других фреймворков, запрещает изменять пользовательский интерфейс, за исключением потока пользовательского интерфейса.

Если это так, то посмотрите, как использовать Dispatcher, чтобы вернуться к потоку пользовательского интерфейса.

...