Asp.net web sayfalarım, IIS web sunucusudur ve temel HTTP bağını kullanarak WCF servisleri (Windows 2008 uygulama sunucusunda) ile iletişim kurar. Wcf servislerimin performansı o kadar iyi görünmüyor ve ben de aynı şeyi geliştirmek istiyorum. Ayrıca, sitem çok yüksek bir trafiğe sahip olacağından, ölçeklenebilirlik konusunda dengelemem gerekiyor.WCF servislerinde protobuf kullanma
cevap
Kısa cevap bir RPC yığın sağlamaz kendisi Spec "evet" ...
protokol tamponlar, ancak bazı spec dışında eklenmiştir.
İlk olarak, protobuf-net, hizmet sözleşmenizdeki işlemleri ProtoBehavior
olarak işaretlemenize olanak tanıyan WCF için kancalara sahiptir. Bu daha sonra protobuf-net serileştirme kullanmak için düzenli DataContractSerializer
takas eder. Ancak, bazı uyarılar vardır:
- veri-üyeleri açık Order sahip olmalıdır (örneğin
[ProtoMember(Order = 1)]
), bu alan tanımlayıcı olarak bu numaralar (protokol tamponlar sayısal alanlar kullanır) - o montaj en iyi şekilde çalışır kullandığından Bu özel davranış temel http taşıma ile kullanılan "mex"
üzerinde açığa çıkmadığı (hizmet sözleşmesi vb)/sınıf paylaşımı, bu da maksimum veri dolaşımının için (etkinse) MTOM ile uyumludur. Önemsiz mesajların performansı büyük ölçüde büyüklükleriyle orantılıdır; protobuf-net'in boyutları here hakkında bir fikir edinebilirsiniz.
Alternatif olarak, ayrıca bir ısmarlama RPC yığını üzerinde çalışıyorum. current build, http üzerinde bir çalışma yığınına sahiptir, ancak şansım olduğunda ham TCP/IP'de etkinleştirmeyi de planlıyorum. Henüz yazma şansım olmadı, ancak istek üzerine örnekler verebiliyorum. En uygun şekilde kullanmak için, 3.5 "uzantıları" dll de isteyeceksiniz.
Herhangi bir sorunuz varsa, yorum veya bana e-posta gönderin (profilime bakın).
protobuf-net Bkz
HTTP sıkıştırması, azaltma ... i protobuf API ... önermek Lütfen kullanabilir miyim .. yollarından bazıları farkındayım ama bunları denemedim henüz.
protobuf-net NET verimli ve kolay bir şekilde nesneleri serialize size izin veren bu bir .NET uygulamasıdır. Bu NET 2.0 dahil NET ailesinin en uyumlu olduğu/3.0/3.5, .NET CF 2.0/3.5, Mono 2.x, Silverlight 2, vb
Cevabınız için teşekkürler ... daha önce protobuf kullanıp kullanmadığınızı ve ne kadar performans artışı görüldüğünü biliyor olabilir miyim? –
Aslında Marc, kitaplığın yazarı StackOverflow'ta bir yerlerde. Onu e-postayla göndereceğim ve soruya işaret edeceğim :) – blowdart
Açıklığa kavuşturmak için sadece "protobuf-net" in yazarıyım; "protokol arabellekleri", Google’daki bazı akıllı kullanıcılara verilen kredidir. –
Ayrıca sürebilir bir WCF servisinin dahili ağın dışına çıkması gerekmiyorsa, TCP tabanlı bir bağlama kullanmaya bakın.
Mesaj ilkel bir veri türü ise ne olur? hala davranışın yerini mi? Örneğin, bir çift dizi döndürürseniz, seri hale getirilmiş bayt olarak gönderilir mi? ve bu durumda montaj paylaşımına ihtiyacınız var mı? Ayrıca, montaj paylaşımı ile en iyi çalıştığını söylüyorsunuz.Peki, eğer müşteri PortoMember siparişini bilmiyorsa, nasıl davranır? – mustafabar