Клиентский текст Sharepoint.Функция ExecuteQueryAsync () не возвращается

#c# #silverlight #sharepoint-2010

#c# #silverlight #sharepoint-2010

Вопрос:

Вот код, который я использую для извлечения текущего имени пользователя из SharePoint 2010 через Silverlight:

 ClientContext clientContext = ClientContext.Current;
if (clientContext == null)
{
    SharepointUser = "[Unknown]";
}
else
{
    MessageBox.Show("Beginning server query now...");
    clientContext.Load(clientContext.Web, s => s.CurrentUser);
    clientContext.ExecuteQueryAsync((s, e) =>
    {
        MessageBox.Show("RESPONSE!");
        SharepointUser = clientContext.Web.CurrentUser.LoginName;
        MessageBox.Show("Hello, "   SharepointUser   "!");
    },
    (s, e) =>
    {
        MessageBox.Show("An error occurred: "   e.ToString());
    });
}
  

Проблема в том, что запрос никогда не возвращается! События успеха / ошибки вообще не запускаются, и запрос просто кажется, что он уходит в пустоту.

У кого-нибудь есть какие-нибудь идеи?

Комментарии:

1. Используйте Fiddler для наблюдения за HTTP-диалогом с сервером. fiddler2.com

2. Он даже не отображается как запрошенный через мой компьютер с помощью Fiddler. Если приложение silverlight размещено на сервере и оно пытается запросить информацию с сервера sharepoint, почему трафик должен проходить через мой локальный компьютер?

3. Ваш код — это код на стороне клиента, а не на стороне сервера.

4. Достаточно справедливо, но это не объясняет, почему запрос никогда не выполняется. 🙁

Ответ №1:

Окно сообщения.Вероятно, причиной проблемы является Show. У меня была такая же проблема, и при отладке я обнаружил, что вызывает MessageBox.Показ в рамках обратных вызовов ExecuteQueryAsync вызывал исключение «Недопустимый доступ между потоками». Мне нужно было обернуть вызовы подобным образом, чтобы заставить его работать:

 Deployment.Current.Dispatcher.BeginInvoke(() => MessageBox.Show("Request Suceeded"));
  

Ответ №2:

Попробуйте это:-

 ClientContext clientContext = ClientContext.Current;
if (clientContext == null)
{
    SharepointUser = "[Unknown]";
}
else
{
            try
            {
    MessageBox.Show("Beginning server query now...");
    clientContext.Load(clientContext.Web, s => s.CurrentUser);
    clientContext.ExecuteQueryAsync((s, e) =>
    {
        MessageBox.Show("RESPONSE!");
        SharepointUser = clientContext.Web.CurrentUser.LoginName;
        MessageBox.Show("Hello, "   SharepointUser   "!");
    },
    (s, e) =>
    {
        MessageBox.Show("An error occurred: "   e.ToString());
    });
            }
            catch (Exception err)
            {
                 MessageBox.Show("Synchronous error occurred: "   err.ToString());
            }
}
  

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

Комментарии:

1. Но вы видите сообщение «Начало …»?