Freigeben über


Beispiel: Moderne SOAP-App für Windows 8-Desktop

 

Veröffentlicht: November 2016

Gilt für: Dynamics CRM 2015

Dieser Beispielcode ist für Microsoft Dynamics CRM 2015 und Microsoft Dynamics CRM Online 2015-Update. Dieser ist an folgender Position im SDK-Downloadpaket verfügbar:

SampleCode\CS\ModernAndMobileApps\ModernSoapApp

Laden Sie das Microsoft Dynamics CRM SDK-Paket herunter.

Anforderungen

Für dieses Beispiel sind die NuGet-Pakete Microsoft.Preview.WindowsAzure.ActiveDirectory.Authentication und Microsoft.IdentityModel.Clients.ActiveDirectory erforderlich. Wenn Sie über eine funktionsfähige Internetverbindung verfügen, werden diese Pakete automatisch heruntergeladen und installiert, wenn Sie die Lösung des Projekts laden.

Weitere Informationen zu den Anforderungen zum Ausführen des in diesem SDK enthaltenen Beispielcodes finden Sie unter Verwenden des Beispiel- und Hilfscode.

Demonstriert

Hauptbildschirm der Windows 8-Beispiel-App

Gekachelte Benutzeroberfläche der Beispiel-App

Dieses Beispiel zeigt, wie Sie eine moderne Windows 8.1-Desktopanwendung schreiben, die Anfragen an Organisationswebdienste senden kann, ohne eine Verknüpfung mit den SDK-Assemblys herzustellen. In diesem Beispiel werden das Microsoft Azure-Active Directory-Authentifizierungsbibliothek (Active Directory Authentication Library; ADAL)- und SOAP-Protokoll verwendet. Das Beispiel zeigt außerdem das Abrufen des OAuth-Endpunkts URL zur Laufzeit.

Auf der Hauptseite der App werden zwar sieben Kacheln angezeigt, jedoch sind nur die Konten- und Aufgabenkacheln mit Ereignishandlercode verbunden. Die anderen Kacheln sind nur Platzhalter.

Der Beispielcode ist für den Microsoft Dynamics CRM Online-Server und eine fiktive Organisation konfiguriert, funktioniert aber auch mit einem IFD-Server.

Codeausschnitte, die nur die wichtigen Abschnitte des vollständigen Beispiels zeigen, werden weiter unten in diesem Thema angezeigt.

Beispiel

Der folgende Codeausschnitt zeigt, wie der Benutzer mit dem Organisationswebdienst authentifiziert wird.

Damit dieser Code funktioniert, müssen Sie die App zunächst bei einem unterstützten Identitätsanbieter registrieren (AD FS oder Microsoft Azure Active Directory). Anschließend müssen Sie die Variablenwerte für _clientID und CrmServiceUrl im Code festlegen. Der Wert für Client-ID wurde bei der App-Registrierung definiert. Weitere Informationen zur App-Registrierung finden Sie unter Exemplarische Vorgehensweise: Registrieren einer CRM-App bei Active Directory.

Beispiel

Der folgende Codeausschnitt zeigt, wie Entitätsdatensätze aus dem Organisationswebdienst mit SOAP-Code in einer HTTP-Anforderung abgerufen werden. Das Authentifizierungszugriffstoken wird in der Autorisierungskopfzeile platziert.


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

Sie können den SOAPLogger-Toolanbieter im SDK-Download verwenden, um den SOAP-Code für eine Organisationsanforderung abzurufen. Weitere Informationen zum Verwenden des SOAPLogger-Tools finden Sie unter Exemplarische Vorgehensweise: Verwenden des modernen App SOAP-Endpunkts mit JavaScript.

Siehe auch

Schreiben von mobilen und modernen Apps
Authentifizieren des Benutzers durch die Webdienste
Beispiel: Moderne OData-App für Windows 8-Desktop
Azure Authentication Library (AAL) für Windows Store: eine eingehende Betrachtung
Sichern einer Windows Store-Anwendung und eines REST-Webdiensts mithilfe von Azure AD (Vorschau)
Grundlegendes zu SOAP

© 2017 Microsoft. Alle Rechte vorbehalten. Copyright