Zugreifen auf WCF-Dienste mit einer Windows Store-Client-AppAccessing WCF Services with a Windows Store Client App

Mit Windows 8 wird ein neuer Anwendungstyp, die so genannten Windows Store-Anwendungen, eingeführt.Windows 8 introduces a new type of application called Windows Store applications. Diese Anwendungen sind für Touchscreenoberflächen konzipiert.These applications are designed around a touch screen interface. .NET Framework 4.5 ermöglicht Windows Store-Anwendungen das Aufrufen von WCF-Diensten..NET Framework 4.5 enables Windows Store applications to call WCF services.

WCF-Unterstützung in Windows Store-AnwendungenWCF Support in Windows Store Applications

Innerhalb einer Windows Store-Anwendung ist ein Teilbereich der WCF-Funktionen verfügbar. Ausführliche Informationen finden Sie in den folgenden Abschnitten.A subset of WCF functionality is available from within a Windows Store application, see the following sections for more details.

Wichtig

Verwenden Sie die WinRT-Syndication-APIs anstelle der von WCF verfügbar gemachten APIs.Use the WinRT syndication APIs instead of those exposed by WCF. Weitere Informationen finden Sie unter , WinRT-Syndication-APIFor more information see, WinRT Syndication API

Warnung

Das Hinzufügen eines Webdienstverweises zu einer Windows Runtime-Komponente unter Verwendung von „Dienstverweis hinzufügen“ wird nicht unterstützt.Using Add Service Reference to add a web service reference to a Windows Runtime Component isn’t supported.

Unterstützte BindungenSupported Bindings

Die folgenden WCF-Bindungen werden in Windows Store-Anwendungen unterstützt:The following WCF bindings are supported in Windows Store Applications:

  1. BasicHttpBinding

  2. NetTcpBinding

  3. NetHttpBinding

  4. CustomBinding

Die folgenden Bindungselemente werden in Windows Store-Anwendungen unterstütztThe 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

Sowohl textbasierte als auch binäre Codierungen werden unterstützt.Both Text and Binary encodings are supported. Alle WCF-Übertragungsmodi werden unterstützt.All WCF transfer modes are supported. Weitere Informationen finden Sie unter Streaming Message Transfer.For more information see, Streaming Message Transfer.

Dienstverweis hinzufügenAdd Service Reference

Um einen WCF-Dienst aus einer Windows Store-Anwendung aufzurufen, verwenden Sie die Funktion „Dienstverweis hinzufügen“ in Visual Studio 2012.To call a WCF service from a Windows Store application, use the Add Service Reference feature of Visual Studio 2012. Sie werden bei Verwendung von „Dienstverweis hinzufügen“ innerhalb einer Windows Store-Anwendung einige Funktionsunterschiede bemerken.You will notice a few changes in the functionality of Add Service Reference when done within a Windows Store application. Als erstes wird keine Konfigurationsdatei generiert.First no configuration file is generated. Da Windows Store-Anwendungen keine Konfigurationsdateien verwenden, müssen sie im Code konfiguriert werden.Windows Store applications do not use configuration files, so they must be configured in code. Dieser Konfigurationscode befindet sich in der Datei „References.cs“, die durch „Dienstverweis hinzufügen“ generiert wird.This configuration code can be found in the References.cs file generated by Add Service Reference. Um diese Datei anzuzeigen, stellen Sie sicher, dass "Alle Dateien anzeigen" Wählen Sie im Projektmappen-Explorer.To see this file, make sure to select "Show All Files" in the solution explorer. Die Datei befindet sich innerhalb des Projekts unter dem Knoten „Dienstverweise“ und dann „Reference.svcmap“.The file will be located under the Service References and then Reference.svcmap nodes within the project. Alle Vorgänge, die für WCF-Dienste in einer Windows Store-Anwendung generiert werden, werden unter Verwendung des taskbasierten asynchronen Musters asynchron implementiert.All operations generated for WCF services within a Windows Store application will be asynchronous using the Task-based asynchronous pattern. Weitere Informationen finden Sie unter Taskbasiertes asynchrones Muster.For more information, see Task-based Asynchronous Pattern.

Da die Konfiguration nun im Code generiert wird, werden alle Änderungen in der Datei „Reference.cs“ überschrieben, sobald der Dienstverweis aktualisiert wird.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. Um diese Situation zu vermeiden, wird der Konfigurationscode innerhalb einer partiellen Methode generiert, die Sie in der Clientproxyklasse implementieren können.To remedy this situation the configuration code is generated within a partial method, which you can implement in your client proxy class. Die partielle Methode wird folgendermaßen deklariert:The partial method is declared as follows:

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

Sie können diese partielle Methode implementieren und die Bindung oder den Endpunkt in der Clientproxyklasse wie folgt ändern: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");  
            }  
        }  
    }  

SerialisierungSerialization

Die folgenden Serialisierungsprogramme werden in Windows Store-Anwendungen unterstützt:The following serializers are supported in Windows Store applications:

  1. DataContractSerializerDataContractSerializer

  2. DataContractJsonSerializerDataContractJsonSerializer

  3. XmlSerializerXmlSerializer

Warnung

„XmlDictionaryWriter.Write (DateTime)“ schreibt jetzt das DateTime-Objekt als Zeichenfolge.XmlDictionaryWriter.Write(DateTime) now writes the DateTime object as a string.

SicherheitSecurity

Die folgenden Sicherheitsmodi werden in Windows Store-Anwendungen unterstütztThe following security modes are supported in Windows Store applications

  1. None

  2. Transport

  3. `System.ServiceModel.SecurityMode.TransportWithMessageCredentials`
  4. `System.ServiceModel.SecurityMode.TransportCredentialOnly`

Die folgenden Clientanmeldeinformationstypen werden in Windows Store-Anwendungen unterstütztThe following client credential types are supported in Windows Store applications

  1. KeineNone

  2. StandardBasic

  3. DigestDigest

  4. NegotiateNegotiate

  5. NTLMNTLM

  6. WindowsWindows

  7. Benutzername (Nachrichtensicherheit)Username (Message Security)

  8. Windows (Transportsicherheit)Windows (Transport Security)

Damit Windows Store-Anwendungen auf standardmäßige Windows-Anmeldeinformationen zugreifen und diese senden können, müssen Sie diese Funktionalität innerhalb der Datei „Package.appmanifest“ aktivieren.In order for Windows Store applications to access and send default Windows credentials, you must enable this functionality within the Package.appmanifest file. Öffnen Sie diese Datei, und wählen Sie die Registerkarte "Funktionen", und wählen Sie die standardmäßigen Windows-Anmeldeinformationen".Open this file and select the Capabilities tab and select "Default Windows Credentials". Dadurch kann die Anwendung eine Verbindung mit Intranetressourcen herstellen, die Domänenanmeldeinformationen erfordern.This allows the application to connect to intranet resources that require domain credentials.

Wichtig

In der Reihenfolge für Windows Store-Anwendungen computerübergreifend Aufrufe ausführen können, müssen Sie eine andere Funktion mit dem Namen "Home/Work Networking" aktivieren.In order for Windows Store applications to make cross machine calls you must enable another capability called "Home/Work Networking". Diese Einstellung befindet sich ebenfalls in der Datei „Package.appmanifest“ auf der Registerkarte für Funktionen. Aktivieren Sie das Kontrollkästchen „Home/Work Networking“.This setting is also in the Package.appmanifest file under the Capabilities tab. Select the Home/Work Networking checkbox. Dadurch erhält die Anwendung eingehenden und ausgehenden Zugriff auf die Netzwerke der vertrauenswürdigen Orte des Benutzers wie Heim und Arbeit.This gives your application inbound and outbound access to the networks of the user’s trusted places like home and work. Wichtige eingehende Ports sind immer blockiert.Inbound critical ports are always blocked. Für den Zugriff auf Internetdienste müssen Sie auch die Internetfunktion (Client) aktivieren.For accessing services on the internet you must also enable Internet (Client) capability.

SonstigesMisc

Die Verwendung der folgenden Klassen wird für Windows Store-Anwendungen unterstützt:The use of the following classes is supported for Windows Store Applications:

  1. ChannelFactory

  2. `System.ServiceModel.DuplexChannelFactory`
  3. CallbackBehaviorAttribute

Definieren von DienstverträgenDefining Service Contracts

Es wird empfohlen, asynchrone Dienstvorgänge nur mit dem taskbasierten asynchronen Muster zu definieren.We recommend only defining asynchronous service operations using the task-based async pattern. Dadurch wird sichergestellt, dass Windows Store-Anwendungen beim Aufrufen eines Dienstvorgangs reaktionsfähig bleiben.This ensures Windows Store applications remain responsive while calling a service operation.

Warnung

Obwohl keine Ausnahme ausgelöst wird, wenn Sie einen synchronen Vorgang definieren, wird dringend empfohlen, nur asynchrone Vorgänge zu definieren.While no exception will be thrown if you define a synchronous operation, it is strongly recommended to only define asynchronous operations.

Aufrufen von WCF-Diensten aus Windows Store-AnwendungenCalling WCF Services from Windows Store Applications

Wie bereits erwähnt, müssen alle Konfigurationsschritte im Code vorgenommen werden, und zwar in der GetBindingForEndpoint-Methode in der generierten Proxyklasse.As mentioned before all configuration must be done in code in the GetBindingForEndpoint method in the generated proxy class. Ein Dienstvorgang wird genauso aufgerufen wie eine taskbasierte asynchrone Methode. Siehe dazu den folgenden Codeausschnitt.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  
    }  
}  

Beachten Sie, dass für die Methode, die den asynchronen Aufruf ausführt, das async-Schlüsselwort und beim Aufrufen der asynchronen Methode das await-Schlüsselwort verwendet wird.Notice the use of the async keyword on the method making the asynchronous call and the await keyword when calling the asynchronous method.

Siehe auchSee Also

WCF in Windows Store-Apps-BlogWCF in Windows Store Apps Blog
WCF Windows Store-Clients und SicherheitWCF Windows Store Clients and Security
Windows Store-Apps und computerübergreifende AufrufeWindows Store Apps and Cross Machine Calls
Aufrufen eines WCF-Diensts in Azure aus Windows Store-Apps bereitgestelltCalling a WCF Service Deployed in Azure from a Windows Store App
Programmieren der WCF-SicherheitProgramming WCF Security
BindungenBindings