Aracılığıyla paylaş


WCF Web HTTP Programlama Modeline Genel Bakış

Windows Communication Foundation (WCF) WEB HTTP programlama modeli, WCF ile WEB HTTP hizmetleri oluşturmak için gereken temel öğeleri sağlar. WCF WEB HTTP hizmetleri, Web tarayıcıları da dahil olmak üzere en geniş istemci yelpazesi tarafından erişilecek şekilde tasarlanmıştır ve aşağıdaki benzersiz gereksinimlere sahiptir:

  • URI'ler ve URI İşleme URI'ler, WEB HTTP hizmetlerinin tasarımında merkezi bir rol oynar. WCF WEB HTTP programlama modeli, URI işleme özellikleri sağlamak için UriTemplate ve UriTemplateTable sınıflarını kullanır.

  • web HTTP hizmetleri GET ve POST işlemleri için Desteği, veri değişikliği ve uzaktan çağırma için çeşitli çağırma fiillerine ek olarak veri alma için GET fiilinden yararlanır. WCF WEB HTTP programlama modeli, hizmet işlemlerini hem GET hem de PUT, POST ve DELETE gibi diğer HTTP fiilleriyle ilişkilendirmek için WebGetAttribute ve WebInvokeAttribute kullanır.

  • Web stili hizmetler birden çok veri biçimi SOAP iletilerine ek olarak birçok veri türünü işler. WCF WEB HTTP programlama modeli XML belgeleri, JSON veri nesnesi ve görüntüler, video dosyaları veya düz metin gibi ikili içerik akışları gibi birçok farklı veri biçimlerini desteklemek için WebHttpBinding ve WebHttpBehavior kullanır.

WCF WEB HTTP programlama modeli, WCF'nin kapsamını, WEB HTTP hizmetleri, AJAX ve JSON hizmetleri ile Dağıtım (ATOM/RSS) akışlarını içeren Web stili senaryoları kapsayacak şekilde genişletir. AJAX ve JSON hizmetleri hakkında daha fazla bilgi için bkz. AJAX Tümleştirmesi ve JSON Desteği . Dağıtım hakkında daha fazla bilgi için bkz. WCF Dağıtımına Genel Bakış.

Bir WEB HTTP hizmetinden döndürülebilecek veri türleri üzerinde ek kısıtlama yoktur. Herhangi bir serileştirilebilir tür bir WEB HTTP hizmeti işleminden döndürülebilir. WEB HTTP hizmeti işlemleri bir web tarayıcısı tarafından çağrılabildiğinden, URL'de hangi veri türlerinin belirtilebileceğine ilişkin bir sınırlama vardır. Hangi türlerin varsayılan olarak desteklendiği hakkında daha fazla bilgi için aşağıdaki UriTemplate Sorgu Dizesi Parametreleri ve URL'leri bölümüne bakın. Varsayılan davranış, URL'de belirtilen parametrelerin gerçek parametre türüne nasıl dönüştürülebileceğini belirten kendi T:System.ServiceModel.Dispatcher.QueryStringConverter uygulamanızı sağlayarak değiştirilebilir. Daha fazla bilgi için bkz. QueryStringConverter

Dikkat

WCF WEB HTTP programlama modeliyle yazılan hizmetler SOAP iletilerini kullanmaz. SOAP kullanılmadığından, WCF tarafından sağlanan güvenlik özellikleri kullanılamaz. Ancak hizmetinizi HTTPS ile barındırarak aktarım tabanlı güvenliği kullanabilirsiniz. WCF güvenliği hakkında daha fazla bilgi için bkz. Güvenliğe Genel Bakış.

Uyarı

IIS için WebDAV uzantısının yüklenmesi, WebDAV uzantısı tüm PUT isteklerini işlemeye çalışırken Web HTTP hizmetlerinin HTTP 405 hatası döndürmesine neden olabilir. Bu sorunu geçici olarak çözmek için WebDAV uzantısını kaldırabilir veya web siteniz için WebDAV uzantısını devre dışı bırakabilirsiniz. Daha fazla bilgi için bkz. IIS ve WebDav.

UriTemplate ve UriTemplateTable ile URI İşleme

URI şablonları, büyük yapısal olarak benzer URI kümelerini ifade etmek için etkili bir söz dizimi sağlar. Örneğin, aşağıdaki şablon ara segmentin değerine bakılmaksızın "a" ile başlayan ve "c" ile biten üç segmentli URI'lerin tümünü ifade eder: a/{segment}/c

Bu şablon URI'leri aşağıdaki gibi açıklar:

  • a/x/c

  • a/y/c

  • a/z/c

  • ve benzeri.

Bu şablonda, süslü parantez gösterimi ("{segment}") sabit bir değer yerine değişken bir segmenti belirtir.

.NET Framework, UriTemplateadlı URI şablonlarıyla çalışmak için bir API sağlar. UriTemplates aşağıdakileri yapmanıza izin verir:

  • Şablonla eşleşen Bind oluşturmak için bir dizi parametre içeren yöntemlerinden birini çağırabilirsiniz. Başka bir deyişle URI şablonundaki tüm değişkenler gerçek değerlerle değiştirilir.

  • "Aday URI'yi bileşenlerine ayırmak için bir şablon kullanan ve şablondaki değişkenlere göre etiketlenmiş URI'nin farklı bölümlerini içeren bir sözlük döndüren Match() fonksiyonunu bir aday URI ile çağırabilirsiniz."

  • Bind() ve Match(), Match( Bind( x ) ) çağırdığınızda başladığınız ortama geri dönebilmeniz için terslerdir.

Birçok kez (özellikle URI'ye göre bir hizmet operasyonuna istek göndermenin gerekli olduğu sunucuda), içerilen şablonların her birini bağımsız olarak ele alabilen bir veri yapısında bir dizi UriTemplate nesnesini izlemek istersiniz. UriTemplateTable bir URI şablonları kümesini temsil eder ve bir şablon kümesi ve aday URI'sine göre en iyi eşleşmeyi seçer. Bu, belirli bir ağ yığınına (WCF dahil) bağlı olmadığından, gerektiğinde kullanabilirsiniz.

WCF Hizmet Modeli, hizmet işlemlerini UriTemplatetarafından açıklanan bir URI kümesiyle ilişkilendirmek için UriTemplateTable ve UriTemplate kullanır. Bir hizmet işlemi, UriTemplate veya WebGetAttributekullanılarak bir WebInvokeAttributeile ilişkilendirilir. UriTemplate ve UriTemplateTablehakkında daha fazla bilgi için bkz. UriTemplate ve UriTemplateTable.

WebGet ve WebInvoke Öznitelikleri

WCF WEB HTTP hizmetleri, çeşitli çağırma fiillerine (örneğin HTTP POST, PUT ve DELETE) ek olarak alma fiillerini (örneğin HTTP GET) kullanır. WCF WEB HTTP programlama modeli, hizmet geliştiricilerinin WebGetAttribute ve WebInvokeAttributeile hizmet işlemleriyle ilişkili URI şablonunu ve fiilini denetlemesine olanak tanır. WebGetAttribute ve WebInvokeAttribute, tek tek işlemlerin URI'lere ve bu URI'lerle ilişkili HTTP yöntemlerine nasıl bağlanacaklarını denetlemenize olanak tanır. Örneğin, aşağıdaki koda WebGetAttribute ve WebInvokeAttribute ekleyin.

[ServiceContract]
interface ICustomer
{
  //"View It"

  [WebGet]
  Customer GetCustomer():

  //"Do It"
    [WebInvoke]
  Customer UpdateCustomerName( string id,
                               string newName );
}

Yukarıdaki kod aşağıdaki HTTP isteklerini yapmanıza olanak tanır.

GET /GetCustomer

POST /UpdateCustomerName

WebInvokeAttribute varsayılan olarak POST olur, ancak bunu diğer fiiller için de kullanabilirsiniz.

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

WCF WEB HTTP programlama modelini kullanan bir WCF hizmetinin tam örneği için bkz. Nasıl yapılır: Temel WCF Web HTTP Hizmeti oluşturma.

UriTemplate Sorgu Dizesi Parametreleri ve URL'leri

Web stili hizmetler, bir hizmet işlemiyle ilişkili bir URL yazılarak Bir Web tarayıcısından çağrılabilir. Bu hizmet işlemleri, URL içindeki bir dize formunda belirtilmesi gereken sorgu dizesi parametrelerini alabilir. Aşağıdaki tabloda, URL içinde geçirilebilen türler ve kullanılan biçim gösterilmektedir.

Tür Biçim
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 (üs gösterimi gerekli olmadan kullanılabilir)
Double -1.79769313486232e308 - 1.79769313486232e308 (üs gösterimine gerek yok)
Char Herhangi bir tek karakter
Decimal Standart gösterimdeki herhangi bir ondalık (üssüz)
Boolean Doğru veya Yanlış (büyük/küçük harfe duyarsız)
String Herhangi bir dize (null dize desteklenmez ve kaçış işlemi yapılmaz)
DateTime GG/AA/YYYY

GG/AA/YYYY SS:DD:SS [ÖÖ|ÖS]

Gün Ay Yıl

Gün Ay Yıl SS:DD:SS [ÖÖ|ÖS]
TimeSpan DD.HH:MM:SS

Burada DD = Gün, SS = Saat, MM = dakika, SS = Saniye
Guid GUID, örneğin:

936DA01F-9ABD-4d9d-80C7-02AF85C822A8
DateTimeOffset AA/GG/YYYY HH:MM:SS MM:SS

Burada DD = Gün, SS = Saat, MM = dakika, SS = Saniye
Numaralandırma Örneğin, aşağıdaki kodda gösterildiği gibi numaralandırmayı tanımlayan numaralandırma değeri.

public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

Tek tek numaralandırma değerlerinden herhangi biri (veya karşılık gelen tamsayı değerleri) sorgu dizesinde belirtilebilir.
Tipi dize gösterimine ve dize gösteriminden dönüştürebilen bir TypeConverterAttribute içeren türler. Tür Dönüştürücüsü'ne bağlıdır.

Biçimler ve WCF WEB HTTP Programlama Modeli

WCF WEB HTTP programlama modeli, birçok farklı veri biçimiyle çalışacak yeni özelliklere sahiptir. Bağlama katmanında, WebHttpBinding aşağıdaki farklı veri türlerini okuyabilir ve yazabilir:

  • XML
  • JSON veri formatı
  • Opak ikili akışlar

Bu, WCF WEB HTTP programlama modelinin herhangi bir veri türünü işleyebileceği anlamına gelir, ancak Streamile programlama yapabilirsiniz.

.NET Framework 3.5, JSON verileri (AJAX) ve Dağıtım akışları (ATOM ve RSS dahil) için destek sağlar. Bu özellikler hakkında daha fazla bilgi için bkz. WCF Web HTTP Biçimlendirmesi, WCF Dağıtımına Genel Bakışve AJAX Tümleştirmesi ve JSON Desteği .

WCF WEB HTTP Programlama Modeli ve Güvenliği

WCF WEB HTTP programlama modeli WS-* protokollerini desteklemediğinden, WCF WEB HTTP hizmetinin güvenliğini sağlamanın tek yolu SSL kullanarak hizmeti HTTPS üzerinden kullanıma sunmadır. IIS 7.0 ile SSL ayarlama hakkında daha fazla bilgi için bkz. IIS'de SSL uygulama.

WCF WEB HTTP Programlama Modeli sorunlarını giderme

ChannelFactoryBase<TChannel> kullanılarak bir kanal oluşturmak için WCF WEB HTTP hizmetlerini çağırırken, yapılandırma dosyasındaki WebHttpBehavior, EndpointAddress'a farklı bir EndpointAddress geçirilmiş olsa bile ChannelFactoryBase<TChannel> tarafından kullanılır.

Ayrıca bkz.