Omówienie modelu programowania usług HTTP w sieci Web przy użyciu programu WCF
Model programowania HTTP sieci Web programu Windows Communication Foundation (WCF) zawiera podstawowe elementy wymagane do tworzenia internetowych usług HTTP za pomocą programu WCF. Usługi HTTP sieci Web WCF są przeznaczone do uzyskiwania dostępu przez najszerszą gamę możliwych klientów, w tym przeglądarek internetowych i mają następujące unikatowe wymagania:
Identyfikatory URI i identyfikatory URI przetwarzania identyfikatorów URI odgrywają kluczową rolę w projektowaniu internetowych usług HTTP. Model programowania HTTP sieci Web WCF używa UriTemplate klas i UriTemplateTable w celu zapewnienia możliwości przetwarzania identyfikatorów URI.
Obsługa operacji GET i POST web usługi HTTP korzystają z czasownika GET na potrzeby pobierania danych, oprócz różnych czasowników wywołań na potrzeby modyfikacji danych i wywołania zdalnego. Model programowania HTTP sieci Web WCF używa elementu WebGetAttribute i WebInvokeAttribute do kojarzenia operacji usług zarówno z poleceniaMI GET, jak i innymi czasownikami HTTP, takimi jak PUT, POST i DELETE.
Wiele formatów danych usługi w stylu sieci Web przetwarzają wiele rodzajów danych oprócz komunikatów PROTOKOŁU SOAP. Model programowania HTTP sieci Web WCF używa WebHttpBinding elementów i WebHttpBehavior do obsługi wielu różnych formatów danych, w tym dokumentów XML, obiektu danych JSON i strumieni zawartości binarnej, takich jak obrazy, pliki wideo lub zwykły tekst.
Model programowania HTTP sieci Web WCF rozszerza zasięg usługi WCF, aby uwzględnić scenariusze w stylu sieci Web, które obejmują usługi WEB HTTP, usługi AJAX i JSON oraz źródła danych Syndication (ATOM/RSS). Aby uzyskać więcej informacji na temat usług AJAX i JSON, zobacz Integracja AJAX i obsługa formatu JSON. Aby uzyskać więcej informacji na temat syndykacji, zobacz Omówienie syndykacji WCF.
Nie ma dodatkowych ograniczeń dotyczących typów danych, które mogą być zwracane z usługi HTTP sieci Web. Każdy typ z możliwością serializacji można zwrócić z operacji internetowej usługi HTTP. Ponieważ operacje usługi HTTP sieci Web mogą być wywoływane przez przeglądarkę internetową, istnieje ograniczenie dotyczące typów danych, które można określić w adresie URL. Aby uzyskać więcej informacji na temat typów obsługiwanych domyślnie, zobacz sekcję Parametry i adresy URL ciągu zapytania UriTemplate poniżej. Zachowanie domyślne można zmienić, podając własną implementację T:System.ServiceModel.Dispatcher.QueryStringConverter, która określa sposób konwertowania parametrów określonych w adresie URL na rzeczywisty typ parametru. Aby uzyskać więcej informacji, zobacz QueryStringConverter.
Uwaga
Usługi napisane za pomocą modelu programowania HTTP sieci Web WCF nie używają komunikatów PROTOKOŁU SOAP. Ponieważ protokół SOAP nie jest używany, nie można używać funkcji zabezpieczeń udostępnianych przez usługę WCF. Można jednak używać zabezpieczeń opartych na transporcie, hostując usługę przy użyciu protokołu HTTPS. Aby uzyskać więcej informacji na temat zabezpieczeń WCF, zobacz Omówienie zabezpieczeń
Ostrzeżenie
Zainstalowanie rozszerzenia WebDAV dla usług IIS może spowodować, że usługi HTTP sieci Web zwracają błąd HTTP 405, ponieważ rozszerzenie WebDAV próbuje obsłużyć wszystkie żądania PUT. Aby obejść ten problem, możesz odinstalować rozszerzenie WebDAV lub wyłączyć rozszerzenie WebDAV dla witryny sieci Web. Aby uzyskać więcej informacji, zobacz USŁUGI IIS i WebDav
Przetwarzanie identyfikatora URI za pomocą identyfikatorów UriTemplate i UriTemplateTable
Szablony identyfikatorów URI zapewniają wydajną składnię do wyrażania dużych zestawów uri strukturalnych podobnych identyfikatorów URI. Na przykład poniższy szablon wyraża zestaw wszystkich identyfikatorów URI trzech segmentów, które zaczynają się od "a" i kończą się ciągiem "c" bez względu na wartość segmentu pośredniego: a/{segment}/c
W tym szablonie opisano identyfikatory URI, takie jak następujące:
a/x/c
a/y/c
a/z/c
i tak dalej.
W tym szablonie notacja nawiasu klamrowego ("{segment}") wskazuje segment zmiennej zamiast wartości literału.
Program .NET Framework udostępnia interfejs API do pracy z szablonami identyfikatorów URI o nazwie UriTemplate. UriTemplates
umożliwia wykonanie następujących czynności:
Możesz wywołać jedną z
Bind
metod z zestawem parametrów, aby utworzyć w pełni zamknięty identyfikator URI zgodny z szablonem. Oznacza to, że wszystkie zmienne w szablonie identyfikatora URI są zastępowane wartościami rzeczywistymi.Można wywołać
Match
() przy użyciu identyfikatora URI kandydata, który używa szablonu do dzielenia identyfikatora URI kandydata na jego części składowe i zwraca słownik zawierający różne części identyfikatora URI oznaczonego zgodnie ze zmiennymi w szablonie.Bind
() iMatch
() są odwrotne, aby można było wywołaćMatch
metodę ( (Bind
x ) i wrócić z tym samym środowiskiem, z którym rozpoczęto pracę.
Istnieje wiele razy (zwłaszcza na serwerze, gdzie wysłanie żądania do operacji usługi na podstawie identyfikatora URI jest konieczne), które chcesz śledzić zestaw UriTemplate obiektów w strukturze danych, która może niezależnie adresować każdy z zawartych szablonów. UriTemplateTable reprezentuje zestaw szablonów identyfikatorów URI i wybiera najlepsze dopasowanie, biorąc pod uwagę zestaw szablonów i identyfikator URI kandydata. Nie jest to powiązane z żadnym konkretnym stosem sieci (dołączonym do programu WCF), więc można go używać wszędzie tam, gdzie jest to konieczne.
Model usługi WCF korzysta z funkcji UriTemplate i UriTemplateTable kojarzy operacje usług z zestawem identyfikatorów URI opisanych przez element UriTemplate. Operacja usługi jest skojarzona z elementem UriTemplate, przy użyciu WebGetAttribute elementu lub WebInvokeAttribute. Aby uzyskać więcej informacji o systemach UriTemplate i UriTemplateTable, zobacz UriTemplate i UriTemplateTable
Atrybuty WebGet i WebInvoke
Usługi HTTP sieci Web programu WCF korzystają z czasowników pobierania (na przykład HTTP GET) oprócz różnych zleceń wywołania (na przykład HTTP POST, PUT i DELETE). Model programowania HTTP sieci Web WCF umożliwia deweloperom usług kontrolowanie zarówno szablonu identyfikatora URI, jak i czasownika skojarzonego z operacjami usługi za pomocą poleceń WebGetAttribute i WebInvokeAttribute. Element WebGetAttribute i WebInvokeAttribute umożliwiają kontrolowanie sposobu, w jaki poszczególne operacje są powiązane z identyfikatorami URI i metodami HTTP skojarzonymi z tymi identyfikatorami URI. Na przykład dodanie WebGetAttribute i WebInvokeAttribute w poniższym kodzie.
[ServiceContract]
interface ICustomer
{
//"View It"
[WebGet]
Customer GetCustomer():
//"Do It"
[WebInvoke]
Customer UpdateCustomerName( string id,
string newName );
}
Powyższy kod umożliwia wykonywanie następujących żądań HTTP.
GET /GetCustomer
POST /UpdateCustomerName
WebInvokeAttribute wartość domyślna to POST, ale można jej używać również dla innych czasowników.
[ServiceContract]
interface ICustomer
{
//"View It" -> HTTP GET
[WebGet( UriTemplate="customers/{id}" )]
Customer GetCustomer( string id ):
//"Do It" -> HTTP PUT
[WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
Customer UpdateCustomer( string id, Customer newCustomer );
}
Aby zapoznać się z kompletnym przykładem usługi WCF korzystającej z modelu programowania HTTP sieci Web WCF, zobacz Instrukcje: tworzenie podstawowej internetowej usługi HTTP programu WCF
Parametry i adresy URL ciągu zapytania UriTemplate
Usługi w stylu sieci Web można wywoływać z przeglądarki sieci Web, wpisując adres URL skojarzony z operacją usługi. Te operacje usługi mogą przyjmować parametry ciągu zapytania, które muszą być określone w postaci ciągu w adresie URL. W poniższej tabeli przedstawiono typy, które można przekazać w adresie URL i używanym formacie.
Typ | Format |
---|---|
Byte | 0 - 255 |
SByte | -128 - 127 |
Int16 | -32768 - 32767 |
Int32 | -2,147,483,648 - 2,147,483,647 |
Int64 | -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807 |
UInt16 | 0 - 65535 |
UInt32 | 0 - 4,294,967,295 |
UInt64 | 0 - 18,446,744,073,709,551,615 |
Single | -3.402823e38 - 3.402823e38 (notacja wykładnicza nie jest wymagana) |
Double | -1.79769313486232e308 - 1.79769313486232e308 (notacja wykładnicza nie jest wymagana) |
Char | Dowolny pojedynczy znak |
Decimal | Każda liczba dziesiętna w notacji standardowej (bez wykładnika) |
Boolean | Prawda lub fałsz (bez uwzględniania wielkości liter) |
String | Dowolny ciąg (ciąg o wartości null nie jest obsługiwany i nie jest wykonywane ucieczka) |
DateTime | MM/DD/RRRR MM/DD/RRRR HH:MM:SS [AM|PM] Rok dnia miesiąca Rok miesiąca HH:MM:SS [AM|PM] |
TimeSpan | DD.HH:MM:SS Where DD = Days, HH = Hours, MM = minutes, SS = Seconds |
Guid | Identyfikator GUID, na przykład: 936DA01F-9ABD-4d9d-80C7-02AF85C82A8 |
DateTimeOffset | MM/DD/RRRR HH:MM:SS MM:SS Where DD = Days, HH = Hours, MM = minutes, SS = Seconds |
Wyliczenia | Na przykład wartość wyliczenia, która definiuje wyliczenie, jak pokazano w poniższym kodzie.public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; Każda z pojedynczych wartości wyliczenia (lub odpowiadających im wartości całkowitych) może być określona w ciągu zapytania. |
Typy, które mają TypeConverterAttribute typ, który może przekonwertować typ na i z reprezentacji ciągu. |
Zależy od konwertera typów. |
Formaty i model programowania HTTP sieci Web WCF
Model programowania HTTP sieci Web WCF ma nowe funkcje do pracy z wieloma różnymi formatami danych. W warstwie WebHttpBinding powiązania element może odczytywać i zapisywać następujące rodzaje danych:
XML
JSON
Nieprzezroczyste strumienie binarne
Oznacza to, że model programowania HTTP w sieci Web WCF może obsługiwać dowolny typ danych, ale może być programowanie względem Streamprogramu .
Program .NET Framework 3.5 zapewnia obsługę danych JSON (AJAX), a także źródeł danych syndykacji (w tym ATOM i RSS). Aby uzyskać więcej informacji na temat tych funkcji, zobacz Web HTTP Formatting , WCF Syndication Overview (Omówienie syndykacji WCF) oraz AJAX Integration and JSON Support (Obsługa integracji i formatu JSON w programie WCF).
WCF WEB HTTP Programming Model and Security
Ponieważ model programowania HTTP sieci Web WCF nie obsługuje protokołów WS-*, jedynym sposobem zabezpieczenia usługi HTTP sieci Web WCF jest uwidocznienie usługi za pośrednictwem protokołu HTTPS przy użyciu protokołu SSL. Aby uzyskać więcej informacji na temat konfigurowania protokołu SSL za pomocą usług IIS 7.0, zobacz Jak zaimplementować protokół SSL w usługach IIS.
Rozwiązywanie problemów z modelem programowania HTTP sieci Web WCF
Podczas wywoływania internetowych usług HTTP programu WCF przy użyciu elementu ChannelFactoryBase<TChannel> w celu utworzenia kanału WebHttpBehavior program używa EndpointAddress zestawu w pliku konfiguracji, nawet jeśli do elementu ChannelFactoryBase<TChannel>jest przekazywany inny EndpointAddress element .