WCF Web HTTP Programlama Modeli 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'leri, WEB HTTP hizmetlerinin tasarımında merkezi bir rol oynar. WCF WEB HTTP programlama modeli, URI işleme özellikleri sağlamak için ve UriTemplateTable sınıflarını kullanırUriTemplate.

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

  • Birden çok veri biçimi Web stili hizmetler 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 ve WebHttpBehavior kullanırWebHttpBinding.

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, küme ayracı gösterimi ("{segment}") değişmez değer yerine değişken segmenti gösterir.

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

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

  • Aday URI'sini kendi bileşenlerine ayırmak için ş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 bir aday URI'siyle () çağırabilirsiniz Match.

  • Bind() ve Match() ters değerlerdir; böylece ( Bind( x ) ) çağrısı Matchyapabilir ve başladığınız ortamla geri dönebilirsiniz.

İçerilen şablonların her birini bağımsız olarak ele alan bir veri yapısındaki bir dizi nesneyi izlemek istediğiniz birçok kez (özellikle URI'yi temel alan bir UriTemplate hizmet işlemine istek göndermenin gerekli olduğu sunucuda) vardır. 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 tarafından açıklanan UriTemplatebir URI kümesiyle ilişkilendirmek için ve UriTemplateTable kullanırUriTemplate. Bir hizmet işlemi veya kullanılarak WebGetAttribute bir UriTemplateile ilişkilendirilirWebInvokeAttribute. ve UriTemplateTablehakkında UriTemplate 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 ve WebInvokeAttributeile hizmet işlemleriyle ilişkili URI şablonunu ve fiilini WebGetAttribute denetlemesine olanak tanır. WebGetAttribute ve , tek tek işlemlerin WebInvokeAttribute 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 ve WebInvokeAttribute ekleyinWebGetAttribute.

[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 olarak gösterilir, 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ğini görmek 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 değildir)
Double -1.79769313486232e308 - 1.79769313486232e308 (üs gösterimi gerekli değildir)
Char Herhangi bir tek karakter
Decimal Standart gösterimindeki herhangi bir ondalık (üs yok)
Boolean True veya False (büyük/küçük harfe duyarsız)
String Herhangi bir dize (null dize desteklenmez ve kaçış işlemi yapılmaz)
DateTime AA/GG/YYYY

AA/GG/YYYY SS:DD:SS [AM|PM]

Ay Günü Yılı

Ay Günü Yıl SSS:DD:SS [AM|PM]
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
Listelemeler Ö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.
Türü dize gösterimine ve dize gösterimine dönüştürebilen bir TypeConverterAttribute türü olan 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

  • Opak ikili akışlar

Bu, WCF WEB HTTP programlama modelinin herhangi bir veri türünü işleyebileceği anlamına gelir, ancak ile Streamprogramlama 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

bir kanal oluşturmak için kullanarak ChannelFactoryBase<TChannel> WCF WEB HTTP hizmetlerini çağırırken, WebHttpBehavior öğesine farklı EndpointAddress bir iletilse ChannelFactoryBase<TChannel>bile yapılandırma dosyasındaki kümesini kullanırEndpointAddress.

Ayrıca bkz.