El clientContext.ExecuteQueryAsync () de Sharepoint no vuelve

Aquí está el código que estoy usando para recuperar el nombre de usuario actual de SharePoint 2010 a través de 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());
    });
}

¡El problema es que la solicitud nunca regresa! Los eventos de éxito / error no se activan en absoluto, y la solicitud parece que va al vacío.

¿Alguien tiene alguna idea?

preguntado el 08 de noviembre de 11 a las 14:11

Utilice Fiddler para observar la conversación HTTP con el servidor. fiddler2.com -

Ni siquiera aparece como solicitado a través de mi computadora con Fiddler. Si la aplicación silverlight está alojada en el servidor e intenta solicitar información del servidor de sharepoint, ¿por qué pasaría el tráfico por mi computadora local? -

Su código es código del lado del cliente, no del lado del servidor. -

Es bastante justo, pero eso no explica por qué nunca se realiza la solicitud. :( -

2 Respuestas

MessageBox.Show es probablemente la causa del problema. Estaba teniendo el mismo problema y al depurar encontré que las llamadas al MessageBox.Show dentro de las devoluciones de llamada ExecuteQueryAsync arrojaban una excepción "Acceso entre subprocesos no válido". Necesitaba envolver las llamadas de esta manera para que funcionara:

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

contestado el 31 de mayo de 12 a las 15:05

Gracias, tuve el mismo problema, ¡y esto me lo solucionó! - Tor Livar

Prueba esto:-

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());
            }
}

Si un intento de iniciar una operación asincrónica falla, normalmente arroja un error de forma sincrónica en lugar de dejarlo a la devolución de llamada asincrónica.

respondido 08 nov., 11:19

¿Pero ve el mensaje "Comenzando ..."? - AnthonyWJones

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.