2009-10-08 15 views
5

Burada bir sorunla karşı karşıyayım. WCF web hizmeti veri almak için çağrı yapan bir istemci/sunucu projesi yapıyorum. Devasa büyük veri aktarımı için, programlamamsal olarak (örneğin, config dosyası ile değil) özel ciltleme bağımı değiştirmem gerekiyor.WSHttpBinding güvenliği ve GZip sıkıştırması ile özel bir ciltleme nasıl oluşturulur?

yeni bir kullanıcı-tanımlama bağlama aka özel bağlama oluşturma.

public class MyCustomBinding : CustomBinding  

ve fonksiyon BindingElementCollection geçersiz: sınıfın örneğidir

public override BindingElementCollection CreateBindingElements() 
{ 
    WSHttpBinding wSHttpBinding = new WSHttpBinding("RMSKeberosBinding"); //this is to load the configuration from app.config. because i want to copy the setting of wsHttpConfig to my custom binding. 

    BindingElementCollection wSHttpBindingElementCollection = wSHttpBinding.CreateBindingElements(); 

    TransactionFlowBindingElement transactionFlowBindingElement = wSHttpBindingElementCollection.Remove<TransactionFlowBindingElement>(); 
    SymmetricSecurityBindingElement securityElement = wSHttpBindingElementCollection.Remove<SymmetricSecurityBindingElement>(); 
    MessageEncodingBindingElement textElement = wSHttpBindingElementCollection.Remove<MessageEncodingBindingElement>(); 
    HttpTransportBindingElement transportElement = wSHttpBindingElementCollection.Remove<HttpTransportBindingElement>(); 

    GZipMessageEncodingBindingElement gzipElement = new GZipMessageEncodingBindingElement(); // this is from microsoft sample. i want to add gzip as a compress to my message. 

    BindingElementCollection newCol = new BindingElementCollection(); 
    newCol.Add(transactionFlowBindingElement); 
    newCol.Add(securityElement); 
    newCol.Add(gzipElement); 
    newCo .Add(transElement); 
    return newCol; 
} 

ne ben yapmaya çalışıyorum bütün wsHttpBinding ayarını kopyalamak ve mesaj kodlayıcı olarak gzip üzerine bir eklenti. Şifreli bir veriyi sıkıştır, orijinal veri boyutunun daha büyük bir boyutuna yol açacaktır. Bunun nedeni WSHttpBinding'dan SymmetricSecurityBindingElement şifreleme yaptı. Doğru şekilde nasıl yapılır? Güvenlik ayarını wshttpbinding ve ayrıca gzip'in çalışmasını istiyorum.

cevap

0

sadece buna göre sıkıştırma uygulamak için bir davranışı kullanmak mümkün olmalıdır:

http://weblogs.asp.net/cibrax/archive/2006/03/29/441398.aspx

DÜZENLEME:

http://weblogs.shockbyte.com.ar/rodolfof/archive/2006/04/06/5632.aspx

+0

: belki de Davranış tabanlı sıkıştırma bağlantı içermelidir Merhaba, cevabınız için teşekkürler. Bana daha önce verdiğin bağlantıyı görmüştüm. Maalesef, WSHttpBinding'ın güvenliğiyle aynı davranışı kullanan yer nerede göremiyorum? Bağlantıyı verdiyse şifrelemeyi de içeriyor mu? –

+0

Benim şifreli mesajın kendisi sıkıştırılmış olsa bile, bağlandığım kodu kullanarak benim deneyimimden, daha büyük bir mesaj boyutuna yol açmadı, ancak bunun yerine mesaj boyutunu azalttı. İletinin özünde sadece SOAP (örn. Ayrıntılı metin) vardır, bu nedenle sıkıştırma kullanarak kazanımları görmelisiniz. Ne yapmak istediğini yanlış anladım mı? – Kwal

+0

Merhaba MattK, cevabınız için teşekkürler. İçindeki deneyimim için, SymmetricSecurityBindingElement ve GZipMessageEncodingBindingElement öğelerini bağlama öğesi koleksiyonuna her eklediğimde (lütfen yukarıdaki kodlara bakın), mesaj her zaman ilk önce şifrelenir, ardından yalnızca sıkıştırmaya devam edilir. Bant genişliği kullanımını kontrol etmek için Fiddler'ı kullanmıştım. Şifrelenmiş bir mesajı sıkıştırdıktan sonra çok büyük. Bunu nasıl çözeceğimi bilmiyorum. Bu arada, bana gönderdiğiniz bağlantı, bana mesajı şifreleyen kısmı nerede gösterebilir? Şifrelenecek kodu bulmayı başaramam. Teşekkürler MattK. –

İlgili konular