Delen via


Voorbeeld: Windows 8-bureaublad moderne SOAP-app

 

Gepubliceerd: november 2016

Is van toepassing op: Dynamics CRM 2015

Deze voorbeeldcode is voor Microsoft Dynamics CRM 2015 en Microsoft Dynamics CRM Online 2015 Update. U vindt deze op de volgende locatie in het download-pakket:

SampleCode\CS\ModernAndMobileApps\ModernSoapApp

Download het Microsoft Dynamics CRM SDK-pakket.

Vereisten

Dit voorbeeld vereist de NuGet-pakketten Microsoft.Preview.WindowsAzure.ActiveDirectory.Authentication en Microsoft.IdentityModel.Clients.ActiveDirectory. Als u een werkende internetverbinding hebt, worden de pakketten automatisch gedownload en geïnstalleerd als u de oplossing van het project laadt.

Voor meer informatie over de vereisten voor het uitvoeren van de voorbeeldcode in deze SDK, zie Het voorbeeld en de helpercode gebruiken.

Demonstreert

Windows 8-hoofdscherm van voorbeeldapp

Betegelde gebruikersinterface van de voorbeeldapp

Dit voorbeeld toont hoe u een Windows 8.1 moderne desktoptoepassing kunt schrijven die aanvragen aan de organisatiewebservice kan verzenden zonder te koppelen aan de SDK-assembly's. Dit voorbeeld maakt gebruik van de protocollen Microsoft Azure-bibliotheek voor Active Directory-verificatie (ADAL) en SOAP. Het voorbeeld laat ook het verkrijgen van het OAuth eindpunt URL tijdens runtime zien.

Hoewel er zeven tegels worden weergeveven in de belangrijkste apppage, zijn alleen de Accounts- en de Takentegel verbonden met de gebeurtenis-handlercode. De andere tegels zijn slechts tijdelijke aanduidingen.

De voorbeeldcode is geconfigureerd voor de Microsoft Dynamics CRM Online-server en een fictieve organisatie, maar werkt ook met een IFD-server.

De codestukjes die de belangrijkste onderdelen van het volledige voorbeeld weergeven worden later in dit onderwerp weergegeven.

Voorbeeld

Het volgende codestukje toont hoe u de gebruiker met de organisatiewebservice kunt verifiëren.

Om deze code te laten werken moet u de app eerst met een ondersteunde identiteitsprovider (AD FS of Microsoft Azure Active Directory) registreren. Vervolgens moet u de variabele waarden voor _clientID en CrmServiceUrl instellen in de code. De waarde voor client-ID is bepaald tijdens de appregistratie. Raadpleeg Overzicht: een CRM-app registreren met Active Directory voor meer informatie over de appregistratie.

Voorbeeld

Het volgende stukje code toont hoe u entiteitsrecords kunt ophalen van de webservice van de organisatie met gebruik van SOAP code in een HTTP verzoek. De verificatietoegangstoken wordt in de geautoriseerde koptekst geplaatst.


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

U kunt de SOAPLogger hulpprogrammaprovider in de SDK-download gebruiken om de SOAP code van een organisatieaanvraag te verkrijgen. Meer informatie over het gebruik van de SOAPLogger tool kunt u vinden in Overzicht: Gebruik het Moderne app SOAP eindpunt met JavaScript.

Zie ook

Mobiele en moderne apps schrijven
De gebruiker verifiëren met de webservices
Voorbeeld: Windows 8 bureaublad moderne OData-app
Azure Authentication Library (AAL) voor Windows Store
Een Windows Store-toepassing en REST-webservice beveiligen met Azure AD (voorbeeld)
Inzicht in SOAP

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht