Udostępnij za pośrednictwem


Uzyskiwanie dostępu do usług WCF za pomocą aplikacji klienckiej ze Sklepu Windows

System Windows 8 wprowadza nowy typ aplikacji o nazwie Aplikacje ze Sklepu Windows. Te aplikacje są projektowane wokół interfejsu ekranu dotykowego. Program .NET Framework 4.5 umożliwia aplikacjom ze Sklepu Windows wywoływanie usług WCF.

Obsługa programu WCF w aplikacjach ze Sklepu Windows

Podzbiór funkcji WCF jest dostępny z poziomu aplikacji Sklepu Windows, zobacz poniższe sekcje, aby uzyskać więcej informacji.

Ważne

Użyj API syndykacji WinRT zamiast tych uwidocznionych przez WCF. Aby uzyskać więcej informacji, przejrzyj Interfejs API syndykacji WinRT

Ostrzeżenie

Dodawanie odniesienia do usługi sieci Web do składnika Windows Runtime nie jest obsługiwane.

Obsługiwane powiązania

Następujące powiązania WCF są obsługiwane w aplikacjach ze Sklepu Windows:

  1. BasicHttpBinding

  2. NetTcpBinding

  3. NetHttpBinding

  4. CustomBinding

Następujące elementy powiązania są obsługiwane w aplikacjach ze Sklepu Windows

  1. BinaryMessageEncodingBindingElement

  2. TextMessageEncodingBindingElement

  3. ConnectionOrientedTransportBindingElement

  4. SslStreamSecurityBindingElement

  5. WindowsStreamSecurityBindingElement

  6. TcpTransportBindingElement

  7. HttpTransportBindingElement

  8. HttpsTransportBindingElement

  9. TransportSecurityBindingElement

Obsługiwane są zarówno kodowanie tekstowe, jak i binarne. Obsługiwane są wszystkie tryby transferu WCF. Aby uzyskać więcej informacji, zobacz Przesyłanie strumieniowe komunikatów.

Dodaj odwołanie do usługi

Aby wywołać usługę WCF z aplikacji ze sklepu Windows, użyj funkcji Dodaj odwołanie do usługi w programie Visual Studio 2012. Podczas pracy w aplikacji Windows Store zauważysz kilka zmian w funkcjonalności podczas dodawania odwołania do usługi. Najpierw nie jest generowany żaden plik konfiguracji. Aplikacje ze Sklepu Windows nie używają plików konfiguracji, dlatego muszą być skonfigurowane w kodzie. Ten kod konfiguracji można znaleźć w pliku References.cs wygenerowany przez dodawanie odwołania do usługi. Aby wyświetlić ten plik, wybierz pozycję "Pokaż wszystkie pliki" w Eksploratorze rozwiązań. Plik będzie znajdować się pod Odwołaniami do usług, a następnie w węzłach Reference.svcmap w projekcie. Wszystkie operacje wygenerowane dla usług WCF w aplikacji Sklepu Windows będą asynchroniczne przy użyciu asynchronicznego wzorca opartego na zadaniach. Aby uzyskać więcej informacji, zobacz Asynchroniczne zadania — upraszczanie programowania asynchronicznego przy użyciu zadań.

Ponieważ konfiguracja jest teraz generowana w kodzie, wszelkie zmiany wprowadzone w pliku Reference.cs zostaną zastąpione za każdym razem, gdy odwołanie do usługi zostanie zaktualizowane. Aby rozwiązać ten problem, kod konfiguracji jest generowany w ramach metody częściowej, którą można zaimplementować w klasie serwera proxy klienta. Metoda częściowa jest zadeklarowana w następujący sposób:

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

Następnie można zaimplementować tę metodę częściową i zmienić powiązanie lub punkt końcowy w klasie serwera proxy klienta w następujący sposób:

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

Serializacja

Następujące serializatory są obsługiwane w aplikacjach ze Sklepu Windows:

  1. Serializator kontraktu danych

  2. DataContractJsonSerializer

  3. XmlSerializer

Ostrzeżenie

XmlDictionaryWriter.Write(DateTime) zapisuje teraz obiekt DateTime jako ciąg.

Bezpieczeństwo

Następujące tryby zabezpieczeń są obsługiwane w aplikacjach ze Sklepu Windows:

  1. None

  2. Transport

  3. TransportWithMessageCredential

  4. Message

Następujące typy poświadczeń klienta są obsługiwane w aplikacjach ze Sklepu Windows:

  1. Żaden

  2. Podstawowy

  3. Podsumowanie

  4. Negocjacja

  5. NTLM

  6. Windows

  7. Nazwa użytkownika (zabezpieczenia komunikatów)

  8. Windows (Zabezpieczenia transportu)

Aby aplikacje ze Sklepu Windows mogły uzyskiwać dostęp do domyślnych poświadczeń systemu Windows i wysyłać je, należy włączyć tę funkcję w pliku Package.appmanifest. Otwórz ten plik i wybierz kartę Możliwości, a następnie wybierz pozycję "Domyślne poświadczenia systemu Windows". Dzięki temu aplikacja może łączyć się z zasobami intranetowymi, które wymagają poświadczeń domeny.

Ważne

Aby aplikacje ze Sklepu Windows mogły wykonywać wywołania między maszynami, należy włączyć inną funkcję o nazwie "Sieć domowa/służbowa". To ustawienie znajduje się również w pliku Package.appmanifest na karcie Możliwości. Zaznacz pole wyboru Sieć domowa/służbowa. Zapewnia to aplikacji dostęp przychodzący i wychodzący do sieci zaufanych miejsc użytkownika, takich jak dom i praca. Porty krytyczne dla ruchu przychodzącego są zawsze blokowane. W przypadku uzyskiwania dostępu do usług w Internecie należy również włączyć funkcję Internet (klient).

Różne

Korzystanie z następujących klas jest obsługiwane w przypadku aplikacji ze Sklepu Windows:

  1. ChannelFactory

  2. DuplexChannelFactory<TChannel>

  3. CallbackBehaviorAttribute

Definiowanie kontraktów usług

Zalecamy definiowanie operacji asynchronicznych tylko przy użyciu wzorca asynchronicznego opartego na zadaniach. Dzięki temu aplikacje ze Sklepu Windows pozostają dynamiczne podczas wywoływania operacji usługi.

Ostrzeżenie

Chociaż podczas definiowania operacji synchronicznej nie zostanie zgłoszony wyjątek, zdecydowanie zaleca się zdefiniowanie tylko operacji asynchronicznych.

Wywoływanie usług WCF z aplikacji ze Sklepu Windows

Jak wspomniano wcześniej, należy wykonać całą konfigurację w kodzie w metodzie GetBindingForEndpoint w wygenerowanej klasie serwera proxy. Wywołanie operacji usługi odbywa się tak samo jak wywoływanie dowolnej metody asynchronicznej opartej na zadaniach, jak pokazano w poniższym fragmencie kodu.

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

Zwróć uwagę na użycie słowa kluczowego async w metodzie dokonującej wywołania asynchronicznego oraz słowa kluczowego await podczas wywoływania metody asynchronicznej.

Zobacz także