Windows ストア クライアント アプリを使用した WCF サービスへのアクセスAccessing WCF Services with a Windows Store Client App

Windows 8 では、Windows ストア アプリケーションと呼ばれる新しい種類のアプリケーションが導入されています。Windows 8 introduces a new type of application called Windows Store applications. これらのアプリケーションはタッチ スクリーンのインターフェイスを念頭にデザインされています。These applications are designed around a touch screen interface. .NET Framework 4.5 により、Windows ストア アプリケーションから WCF サービスを呼び出すことができます。.NET Framework 4.5 enables Windows Store applications to call WCF services.

Windows ストア アプリケーションでの WCF のサポートWCF Support in Windows Store Applications

WCF 機能の一部は、Windows ストア アプリケーション内から利用できます。詳細については、以降のセクションを参照してください。A subset of WCF functionality is available from within a Windows Store application, see the following sections for more details.

重要

WCF で公開される API ではなく、WinRT 配信 API を使用してください。Use the WinRT syndication APIs instead of those exposed by WCF. 詳細については、「 Windows.Web.Syndication 名前空間」を参照してください。For more information see, WinRT Syndication API

警告

サービス参照の追加を使用して Windows ランタイム コンポーネントへの Web サービス参照を追加することはサポートされていません。Using Add Service Reference to add a web service reference to a Windows Runtime Component isn’t supported.

サポートされているバインドSupported Bindings

Windows ストア アプリケーションでは、以下の WCF バインドがサポートされています。The following WCF bindings are supported in Windows Store Applications:

  1. BasicHttpBinding

  2. NetTcpBinding

  3. NetHttpBinding

  4. CustomBinding

Windows ストア アプリケーションでは、以下のバインド要素がサポートされています。The following binding elements are supported in Windows Store Applications

  1. BinaryMessageEncodingBindingElement

  2. TextMessageEncodingBindingElement

  3. ConnectionOrientedTransportBindingElement

  4. SslStreamSecurityBindingElement

  5. WindowsStreamSecurityBindingElement

  6. TcpTransportBindingElement

  7. HttpTransportBindingElement

  8. HttpsTransportBindingElement

  9. TransportSecurityBindingElement

テキスト エンコードとバイナリ エンコードの両方がサポートされています。Both Text and Binary encodings are supported. すべての WCF 転送モードがサポートされています。All WCF transfer modes are supported. 詳細については、「 Streaming Message Transfer」を参照してください。For more information see, Streaming Message Transfer.

サービス参照の追加Add Service Reference

WCF サービスを Windows ストア アプリケーションから呼び出すには、Visual Studio 2012 の "サービス参照の追加" 機能を使用します。To call a WCF service from a Windows Store application, use the Add Service Reference feature of Visual Studio 2012. Windows ストア アプリケーションでは、"サービス参照の追加" 機能にいくつかの変更が行われていることがわかります。You will notice a few changes in the functionality of Add Service Reference when done within a Windows Store application. まず、構成ファイルが生成されません。First no configuration file is generated. Windows ストア アプリケーションでは構成ファイルが使用されないため、コードで構成する必要があります。Windows Store applications do not use configuration files, so they must be configured in code. この構成コードは、"サービス参照の追加" によって生成される References.cs ファイルにあります。This configuration code can be found in the References.cs file generated by Add Service Reference. このファイルを表示するには、ソリューションエクスプローラーで [すべてのファイルを表示] を選択してください。To see this file, make sure to select "Show All Files" in the solution explorer. このファイルは、[サービス参照] の下のプロジェクト内の Reference.svcmap ノードにあります。The file will be located under the Service References and then Reference.svcmap nodes within the project. Windows ストア アプリケーション内で WCF サービスに対して生成されるすべての操作は非同期で、タスク ベースの非同期パターンが使用されます。All operations generated for WCF services within a Windows Store application will be asynchronous using the Task-based asynchronous pattern. 詳細については、「非同期タスク-タスクを使用した非同期プログラミングの簡素化」を参照してください。For more information, see Async Tasks - Simplify Asynchronous Programming with Tasks.

構成がコードで生成されるようになったため、サービス参照を更新するたびに、Reference.cs ファイルで行ったすべての変更が上書きされます。Because configuration is now generated in code, any changes made in the Reference.cs file would be overwritten every time the service reference is updated. この状況に対処するために、構成コードは部分メソッド内に生成され、これをクライアント プロキシ クラスで実装できます。To remedy this situation the configuration code is generated within a partial method, which you can implement in your client proxy class. 部分メソッドは次のように宣言されています。The partial method is declared as follows:

static partial void Configure(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint,  
            System.ServiceModel.Description.ClientCredentials clientCredentials);  

その後、この部分メソッドを実装し、次のように、クライアント プロキシ クラスのバインドまたはエンドポイントを変更できます。You can then implement this partial method and change the binding or endpoint in your client proxy class as follows:

public partial class Service1Client : System.ServiceModel.ClientBase<MetroWcfClient.ServiceRefMultiEndpt.IService1>, MetroWcfClient.ServiceRefMultiEndpt.IService1  
    {   
        static partial void Configure(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint,   
            System.ServiceModel.Description.ClientCredentials clientCredentials)  
        {  
            if (serviceEndpoint.Name ==   
                    ServiceRefMultiEndpt.Service1Client.EndpointConfiguration.BasicHttpBinding_IService1.ToString())  
            {  
                serviceEndpoint.Binding.SendTimeout = new System.TimeSpan(0, 1, 0);  
            }  
            else if (serviceEndpoint.Name ==   
                    ServiceRefMultiEndpt.Service1Client.EndpointConfiguration.BasicHttpBinding_IService11.ToString())  
            {  
                serviceEndpoint.Binding.SendTimeout = new System.TimeSpan(0, 1, 0);  
                clientCredentials.UserName.UserName = "username1";  
                clientCredentials.UserName.Password = "password";  
            }  
            else if (serviceEndpoint.Name ==   
                    ServiceRefMultiEndpt.Service1Client.EndpointConfiguration.NetTcpBinding_IService1.ToString())  
            {  
                serviceEndpoint.Binding.Name = "MyTcpBinding";  
                serviceEndpoint.Address = new System.ServiceModel.EndpointAddress("net.tcp://localhost/tcp");  
            }  
        }  
    }  

シリアル化Serialization

Windows ストア アプリケーションでは、次のシリアライザーがサポートされています。The following serializers are supported in Windows Store applications:

  1. DataContractSerializerDataContractSerializer

  2. DataContractJsonSerializerDataContractJsonSerializer

  3. XmlSerializerXmlSerializer

警告

XmlDictionaryWriter.Write(DateTime) は、DateTime オブジェクトを文字列として出力するようになりました。XmlDictionaryWriter.Write(DateTime) now writes the DateTime object as a string.

セキュリティSecurity

Windows ストアアプリケーションでは、次のセキュリティモードがサポートされています。The following security modes are supported in Windows Store applications:

  1. None

  2. Transport

  3. TransportWithMessageCredential

  4. Message

Windows ストアアプリケーションでは、次のクライアント資格情報の種類がサポートされています。The following client credential types are supported in Windows Store applications:

  1. なしNone

  2. BasicBasic

  3. DigestDigest

  4. NegotiateNegotiate

  5. NTLMNTLM

  6. WindowsWindows

  7. ユーザー名 (メッセージ セキュリティ)Username (Message Security)

  8. Windows (トランスポート セキュリティ)Windows (Transport Security)

Windows ストア アプリケーションから既定の Windows 資格情報にアクセスして送信するためには、Package.appmanifest ファイル内でこの機能を有効にする必要があります。In order for Windows Store applications to access and send default Windows credentials, you must enable this functionality within the Package.appmanifest file. このファイルを開き、[機能] タブを選択し、[既定の Windows 資格情報] を選択します。Open this file and select the Capabilities tab and select "Default Windows Credentials". これにより、ドメイン資格情報を必要とするイントラネット リソースにアプリケーションが接続できるようになります。This allows the application to connect to intranet resources that require domain credentials.

重要

Windows ストアアプリケーションでコンピューター間の呼び出しを行うには、"ホーム/社内ネットワーク" と呼ばれる別の機能を有効にする必要があります。In order for Windows Store applications to make cross machine calls you must enable another capability called "Home/Work Networking". この設定は、Package.appmanifest ファイル内の [機能] タブにもあります。[ホーム/社内ネットワーク] チェック ボックスをオンにします。This setting is also in the Package.appmanifest file under the Capabilities tab. Select the Home/Work Networking checkbox. これで、アプリケーションは、自宅や職場など、ユーザーが信頼できる場所のネットワークに着信および発信アクセスできるようになります。This gives your application inbound and outbound access to the networks of the user’s trusted places like home and work. 着信方向の重要なポートは常にブロックされます。Inbound critical ports are always blocked. また、インターネット上のサービスにアクセスするには、インターネット (クライアント) の機能も有効にする必要があります。For accessing services on the internet you must also enable Internet (Client) capability.

[その他]Misc

Windows ストア アプリケーションでは、次のクラスの使用がサポートされています。The use of the following classes is supported for Windows Store Applications:

  1. ChannelFactory

  2. DuplexChannelFactory<TChannel>

  3. CallbackBehaviorAttribute

サービス コントラクトの定義Defining Service Contracts

非同期サービス操作の定義には、タスク ベースの非同期パターンのみを使用することをお勧めします。We recommend only defining asynchronous service operations using the task-based async pattern. これにより、サービス操作の呼び出し中も、Windows ストア アプリケーションの応答が維持されます。This ensures Windows Store applications remain responsive while calling a service operation.

警告

同期操作を定義した場合でも例外はスローされませんが、非同期操作のみを定義することを強くお勧めします。While no exception will be thrown if you define a synchronous operation, it is strongly recommended to only define asynchronous operations.

Windows ストア アプリケーションからの WCF サービスの呼び出しCalling WCF Services from Windows Store Applications

既に説明したように、すべての構成は、生成されたプロキシ クラスの GetBindingForEndpoint メソッドのコード内で行う必要があります。As mentioned before all configuration must be done in code in the GetBindingForEndpoint method in the generated proxy class. 次のコードに示すように、サービス操作の呼び出しは、タスク ベースの非同期メソッドの呼び出しと同じように実行されます。Calling a service operation is done the same as calling any task-based asynchronous method as shown in the following code snippet.

void async SomeMethod()  
{  
    ServiceClient proxy = new ServiceClient();  
    Task<T> results = await proxy.CallAsync(param1, param2);  
    T result = results.Result;  
    if (result.Success)  
    {  
       // Do something with result  
    }  
}  

非同期呼び出しを行うメソッドでは async キーワード、非同期メソッドの呼び出し時には await キーワードが使用されていることに注意してください。Notice the use of the async keyword on the method making the asynchronous call and the await keyword when calling the asynchronous method.

関連項目See also