Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
Następujące elementy powiązania są obsługiwane w aplikacjach ze Sklepu Windows
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:
Serializator kontraktu danych
DataContractJsonSerializer
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:
Następujące typy poświadczeń klienta są obsługiwane w aplikacjach ze Sklepu Windows:
Żaden
Podstawowy
Podsumowanie
Negocjacja
NTLM
Windows
Nazwa użytkownika (zabezpieczenia komunikatów)
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:
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.