Compartir a través de


Ejemplo: aplicación moderna de escritorio SOAP de Windows 8

 

Publicado: noviembre de 2016

Se aplica a: Dynamics CRM 2015

Este código de muestra es para Microsoft Dynamics CRM 2015 y actualización de Microsoft Dynamics CRM Online 2015. Se puede encontrar en la siguiente ubicación en el paquete de descarga:

SampleCode\CS\ModernAndMobileApps\ModernSoapApp

Descargue el paquete de SDK de Microsoft Dynamics CRM.

Requisitos

Este ejemplo requiere los paquetes NuGet Microsoft.Preview.WindowsAzure.ActiveDirectory.Authentication y Microsoft.IdentityModel.Clients.ActiveDirectory. Si tiene una conexión a Internet activa, los paquetes se descargan e instalan automáticamente al cargar la solución del proyecto.

Para obtener más información acerca de los requisitos de ejecución del código de ejemplo proporcionado en este SDK, vea Usar el ejemplo y el código auxiliar.

Muestra

Pantalla principal de la aplicación de ejemplo de Windows 8

Interfaz de usuario en ventanas de la aplicación de ejemplo

Este ejemplo muestra cómo escribir una moderna aplicación de escritorio de Windows 8.1 que puede enviar solicitudes al servicio web de la organización sin vincularse a los ensamblados del SDK. Este ejemplo usa la Biblioteca de autenticación de Active Directory de Microsoft Azure (ADAL) y el protocolo SOAP. El ejemplo también muestra cómo obtener la URL del extremo OAuth en tiempo de ejecución.

Aunque aparecen siete mosaicos en la página principal de la aplicación, solo los mosaicos Accounts y Tasks están conectados a código de controlador de eventos. Los otros mosaicos son solo marcadores de posición.

El código de ejemplo se configura para el servidor de Microsoft Dynamics CRM Online y una organización ficticia, pero también funcionará con un servidor de IFD.

Los fragmentos de código que muestran solo las secciones principales del ejemplo completo se muestran más adelante en este tema.

Ejemplo

El fragmento de código siguiente muestra cómo autenticar al usuario con el servicio web de la organización.

Para que este código funcione, primero debe registrar la aplicación con un proveedor de identidad compatible (AD FS o Microsoft Azure Active Directory). A continuación, debe establecer los valores de variable para _clientID y CrmServiceUrl en el código. El valor del identificador del cliente se definido durante el registro de la aplicación. Para obtener más información acerca del registro de aplicaciones, consulte Tutorial: registrar una aplicación de CRM con Active Directory.

Ejemplo

El fragmento de código siguiente muestra cómo recuperar registros de entidad desde el servicio web de la organización utilizando código de SOAP en una solicitud HTTP. El token de acceso de la autenticación se incluye en el encabezado de autorización.


using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

namespace ModernSoapApp
{
    public static class HttpRequestBuilder
    {
        /// <summary>
        /// Retrieve entity record data from the organization web service. 
        /// </summary>
        /// <param name="accessToken">The web service authentication access token.</param>
        /// <param name="Columns">The entity attributes to retrieve.</param>
        /// <param name="entity">The target entity for which the data should be retreived.</param>
        /// <returns>Response from the web service.</returns>
        /// <remarks>Builds a SOAP HTTP request using passed parameters and sends the request to the server.</remarks>
        public static async Task<string> RetrieveMultiple(string accessToken, string[] Columns, string entity)
        {
            // Build a list of entity attributes to retrieve as a string.
            string columnsSet = string.Empty;
            foreach (string Column in Columns)
            {
                columnsSet += "<b:string>" + Column + "</b:string>";
            }

            // Default SOAP envelope string. This XML code was obtained using the SOAPLogger tool.
            string xmlSOAP =
             @"<s:Envelope xmlns:s='https://schemas.xmlsoap.org/soap/envelope/'>
                <s:Body>
                  <RetrieveMultiple xmlns='https://schemas.microsoft.com/xrm/2011/Contracts/Services' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
                    <query i:type='a:QueryExpression' xmlns:a='https://schemas.microsoft.com/xrm/2011/Contracts'><a:ColumnSet>
                    <a:AllColumns>false</a:AllColumns><a:Columns xmlns:b='https://schemas.microsoft.com/2003/10/Serialization/Arrays'>" + columnsSet +
                   @"</a:Columns></a:ColumnSet><a:Criteria><a:Conditions /><a:FilterOperator>And</a:FilterOperator><a:Filters /></a:Criteria>
                    <a:Distinct>false</a:Distinct><a:EntityName>" + entity + @"</a:EntityName><a:LinkEntities /><a:Orders />
                    <a:PageInfo><a:Count>0</a:Count><a:PageNumber>0</a:PageNumber><a:PagingCookie i:nil='true' />
                    <a:ReturnTotalRecordCount>false</a:ReturnTotalRecordCount>
                    </a:PageInfo><a:NoLock>false</a:NoLock></query>
                  </RetrieveMultiple>
                </s:Body>
              </s:Envelope>";

            // The URL for the SOAP endpoint of the organization web service.
            string url = CurrentEnvironment.CrmServiceUrl + "/XRMServices/2011/Organization.svc/web";

            // Use the RetrieveMultiple CRM message as the SOAP action.
            string SOAPAction = "https://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/RetrieveMultiple";

            // Create a new HTTP request.
            HttpClient httpClient = new HttpClient();

            // Set the HTTP authorization header using the access token.
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

            // Finish setting up the HTTP request.
            HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, url);
            req.Headers.Add("SOAPAction", SOAPAction);
            req.Method = HttpMethod.Post;
            req.Content = new StringContent(xmlSOAP);
            req.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("text/xml; charset=utf-8");

            // Send the request asychronously and wait for the response.
            HttpResponseMessage response;
            response = await httpClient.SendAsync(req);
            var responseBodyAsText = await response.Content.ReadAsStringAsync();

            return responseBodyAsText;
        }
    }
}

Puede usar la herramienta SOAPLogger proporcionada en la descarga de SDK para obtener el código de SOAP para una solicitud de la organización. Para obtener más información acerca del uso de la herramienta SOAPLogger, consulte Tutorial: use el exptremo de SOAP de aplicación moderna con JavaScript.

Ver también

Escriba aplicaciones modernas y móviles
Autenticar al usuario con los servicios web
Ejemplo: aplicación moderna de escritorio OData de Windows 8
Biblioteca de autenticación de Windows Azure (AAL) para la Tienda Windows: un análisis en profundidad
Seguridad de una aplicación de la Tienda Windows y el servicio web de REST mediante Azure AD (vista previa)
Información sobre SOAP

© 2017 Microsoft. Todos los derechos reservados. Copyright