다음을 통해 공유


샘플: Windows 8 데스크톱 최신 SOAP 앱

 

게시 날짜: 2016년 11월

적용 대상: Dynamics CRM 2015

이 샘플 코드는 Microsoft Dynamics CRM 2015 및 Microsoft Dynamics CRM Online 2015 업데이트용입니다. 다운로드 패키지의 다음 위치에서 확인할 수 있습니다.

SampleCode\CS\ModernAndMobileApps\ModernSoapApp

Microsoft Dynamics CRM SDK 패키지를 다운로드합니다.

요구 사항

이 샘플에는 Microsoft.Preview.WindowsAzure.ActiveDirectory.AuthenticationMicrosoft.IdentityModel.Clients.ActiveDirectory NuGet 패키지가 필요합니다. 작동 중인 인터넷 연결이 있을 경우 이 패키지는 프로젝트의 솔루션을 로드할 때 자동으로 다운로드 및 설치됩니다.

이 SDK에서 제공된 샘플 코드를 실행하기 위한 요구 사항에 대한 자세한 내용은 샘플 및 도우미 코드 사용을 참조하십시오.

보여 주기

Windows 8 샘플 앱 기본 화면

샘플 앱의 타일 모양 사용자 인터페이스

이 샘플에서는 SDK 어셈블리에 연결하지 않고 조직 웹 서비스에 요청을 보낼 수 있는 Windows 8.1 데스크톱 최신 응용 프로그램을 작성하는 방법을 보여 줍니다. 이 샘플에서는 Microsoft Azure Active Directory Authentication Library(ADAL) 및 SOAP 프로토콜을 사용합니다. 이 샘플은 런타임에 OAuth 끝점 URL을 가져오는 방법도 보여 줍니다.

기본 앱 페이지에 표시되는 타일은 7개이지만 거래처 및 작업 타일만 이벤트 처리기 코드에 연결됩니다. 다른 타일은 자리 표시자일 뿐입니다.

예제 코드는 Microsoft Dynamics CRM Online 서버 및 가상 조직에 사용하도록 구성되어 있지만 IFD 서버에도 사용할 수 있습니다.

전체 샘플의 핵심 섹션만 표시하는 코드 조각은 이 항목의 뒷부분에 나와 있습니다.

예제

다음 코드 조각은 조직 웹 서비스로 사용자를 인증하는 방법을 보여 줍니다.

이 코드가 작동하려면 먼저 지원되는 ID 공급자(AD FS 또는 Microsoft Azure Active Directory)로 앱을 등록해야 합니다. 그런 다음 코드에서 _clientID 및 CrmServiceUrl의 변수 값을 설정해야 합니다. 클라이언트 ID의 값은 앱 등록 중 정의되었습니다. 앱 등록에 대한 자세한 내용은 연습: Active Directory를 사용하여 CRM 앱 등록을 참조하십시오.

예제

다음 코드 조각은 HTTP 요청 시 SOAP 코드를 사용하여 조직 웹 서비스에서 엔터티 레코드를 검색하는 방법을 보여 줍니다. 인증 액세스 토큰은 인증 헤더에 배치됩니다.


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

SDK 다운로드에서 SOAPLogger 도구를 사용하여 조직 요청에 대한 SOAP 코드를 가져올 수 있습니다.SOAPLogger 도구 사용에 대한 자세한 내용은 연습: JavaScript와 함께 최신 앱 SOAP 끝점 사용을 참조하십시오.

참고 항목

모바일 및 최신 앱 작성
웹 서비스를 사용하여 사용자 인증
샘플: Windows 8 데스크톱 최신 OData 앱
Windows Store용 Azure Authentication Library(AAL): 심해 잠수
Azure AD를 사용한 Windows Store 애플리케이션 및 REST 웹 서비스 확보(미리 보기)
SOAP 이해

© 2017 Microsoft. All rights reserved. 저작권 정보