サンプル: Windows 8 デスクトップ modern 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.Authentication および Microsoft.IdentityModel.Clients.ActiveDirectory NuGet パッケージが必要です。 インターネットに接続している場合、プロジェクトのソリューションをロードするとき、これらのパッケージが自動的にダウンロードされインストールされます。
この SDK で提供するサンプル コードを実行するために必要な要件については、「サンプルとヘルパー コードの使用」を参照してください。
使用例
サンプル アプリのタイル ユーザー インターフェイス |
このサンプルは、SDK アセンブリにリンクしなくても組織の Web サービスへ要求を送信できる、Windows 8.1 のデスクトップ モダン アプリケーションの作成方法を示します。 このサンプルでは、Microsoft Azure の Active Directory 認証ライブラリ (ADAL) と SOAP プロトコルを使用します。 また、サンプルは、実行時の OAuth エンドポイント URL 取得を実行します。 7 つのタイルがメイン アプリケーション ページに表示される中で、取引先企業とタスクのタイルのみがイベント ハンドラー コードに接続されます。 残りのタイルは単なるプレースホルダーです。 このコード例は、Microsoft Dynamics CRM Online サーバーと架空の組織で使用するように構成されていますが、IFD サーバーでも使用できます。 完全なサンプルの主要なセクションだけを示したコード スニペットをこのトピックで後述します。 |
例
次のコード スニペットは、組織の Web サービスでユーザーを認証する方法を示しています。
このコードが機能するには、最初に、サポートされる ID プロバイダー (AD FS または Microsoft Azure Active Directory) でアプリケーションを登録する必要があります。 次に、コード内の _clientID と CrmServiceUrl の変数値を設定する必要があります。 クライアント ID の値はアプリケーション登録時に定義されました。 アプリケーションの登録の詳細については、「チュートリアル: Active Directory で CRM アプリを登録する」を参照してください。
例
次のコード スニペットは、HTTP 要求で SOAP コードを使用して、組織の Web サービスからエンティティ レコードを取得する方法を示しています。 認証アクセス トークンは認証ヘッダーに配置されます。
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 エンドポイントを使用する」を参照してください。
関連項目
モバイル アプリやモダン アプリを作成する
Web サービスでユーザーを認証する
サンプル: Windows 8 デスクトップ modern OData アプリ
Windows ストアの Azure 認証ライブラリ (AAL): 掘り下げた分析
Azure AD を使用した Windows ストア アプリケーションと REST Web サービスの保護 (プレビュー)
SOAP について
© 2017 Microsoft. All rights reserved. 著作権