Partilhar via


Exemplo: Aplicativo SOAP moderno de área de trabalho do Windows 8

 

Publicado: novembro de 2016

Aplicável a: Dynamics CRM 2015

Este código de exemplo é para o Atualização do Microsoft Dynamics CRM 2015 e Microsoft Dynamics CRM Online 2015. Pode ser encontrado no seguinte local no pacote de download:

SampleCode\CS\ModernAndMobileApps\ModernSoapApp

Baixe o pacote do SDK do Microsoft Dynamics CRM.

Requisitos

Este exemplo requer os pacotes NuGet Microsoft.Preview.WindowsAzure.ActiveDirectory.Authentication e Microsoft.IdentityModel.Clients.ActiveDirectory. Se você tem uma conexão com a Internet funcionando, os pacotes são baixados e instalados automaticamente durante o carregamento da solução do projeto.

Para obter mais informações sobre os requisitos necessários à execução do código de exemplo fornecido neste SDK, consulte Usar o código de exemplo e auxiliar.

Demonstra

A tela principal do aplicativo de exemplo do Windows 8

Interface com o usuário fixada do aplicativo de exemplo

Esse exemplo mostra como gravar um aplicativo moderno de desktop Windows 8.1 que possa enviar solicitações para o serviço Web da organização sem se vincular aos assemblies do SDK. Esse exemplo usa o protocolo Biblioteca de Autenticação do Active Directory (ADAL) do Microsoft Azure e SOAP. O exemplo também mostra a obtenção do ponto de extremidade do OAuth na URL do tempo de execução.

Quando há sete quadros exibidos na página principal do aplicativo, somente os quadros Contas e Tarefas são conectados ao código do manipulador de eventos. Os outros quadros são apenas espaços reservados.

O código de exemplo é configurado para uso com o servidor Microsoft Dynamics CRM Online e uma organização fictícia, mas também funciona com um servidor IFD.

Trechos de código que mostram somente as principais seções do exemplo completo são mostrados mais adiante neste tópico.

Exemplo

O trecho do código a seguir mostra como autenticar o usuário com o serviço Web da organização.

Para que esse código funcione, primeiro você deve registrar o aplicativo em um provedor de identidade suportado (AD FS ou Active Directory do Microsoft Azure). Em seguida, você deve definir os valores variáveis para _clientID e CrmServiceUrl no código. O valor da ID do cliente foi definido durante o registro do aplicativo. Para obter mais informações sobre o registro do aplicativo, consulte Passo a passo: Registrar o aplicativo CRM com Ative Directory.

Exemplo

O trecho do código a seguir mostra como recuperar registros da entidade do serviço Web da organização usando o código de protocolo SOAP em uma solicitação HTTP. O token de acesso de autenticação é colocado no cabeçalho de autorização.


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

Você pode usar o provedor de ferramenta SOAPLogger no download do SDK para obter o código do SOAP para uma solicitação de organização. Para obter informações sobre o uso da ferramenta SOAPLogger, consulte Passo a passo: Usar o ponto de extremidade do SOAP do aplicativo moderno com JavaScript.

Confira Também

Crie aplicativos móveis e modernos
Autenticar o usuário nos serviços web
Exemplo: Aplicativo OData moderno de área de trabalho do Windows 8
Biblioteca de Autenticação do Azure (AAL) para o Windows Store: uma Análise Profunda
Protegendo um aplicativo da Windows Store e serviço Web REST usando o Azure AD (Preview)
Noções básicas sobre SOAP

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais