2009-10-08 6 views
5

Mam tu do czynienia z problemem. Wykonuję projekt klient/serwer, który jest wywoływaniem usługi WCF w celu uzyskania danych. Z uwagi na ogromne dane dotyczące transferu, muszę zmienić moje powiązanie na niestandardowe powiązanie programowo (nie przez plik konfiguracyjny).Jak utworzyć niestandardowe powiązanie, korzystając z zabezpieczeń WSHttpBinding i kompresji GZip?

Jestem tworzenie nowego wiązania definiującego użytkownika, czyli niestandardowego powiązania. przykładem tej klasy jest:

public class MyCustomBinding : CustomBinding  

i nadpisać BindingElementCollection funkcję:

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

co próbuję zrobić, to skopiować wszystkie ustawienia z wsHttpBinding i dodać na gzip jako kodera wiadomości. Skompresowanie zaszyfrowanych danych spowoduje zwiększenie rozmiaru oryginalnego rozmiaru danych. Wynika to z faktu, że SymmetricSecurityBindingElement z WSHttpBinding dokonało szyfrowania. Jak to zrobić w prawidłowy sposób? Chcę ustawienia zabezpieczeń z wshttpbinding, a także gzip do pracy.

Odpowiedz

0

powinien być w stanie po prostu użyć zachowanie zastosować kompresję Odpowiednio:

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

EDIT: I być może powinien również zawierać link do kompresji opartej na zachowanie:

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

+0

Cześć, dziękuję za odpowiedź. Widziałem link, który mi dałeś wcześniej. Przepraszam, ale nie widzę, gdzie jest to miejsce, używając tego samego zachowania zabezpieczeń WSHttpBinding? Czy podany link zawiera szyfrowanie? –

+0

Z mojego doświadczenia z wykorzystaniem kodu, z którym się łączyłem, mimo że cała zaszyfrowana wiadomość jest skompresowana, nie doprowadziła do zwiększenia rozmiaru wiadomości, ale zmniejszyła rozmiar wiadomości. Komunikat jest w jego rdzeniu jest po prostu SOAP (tj. Pełny tekst), więc używając kompresji powinieneś zobaczyć zyski. Czy nie rozumiem, co chcesz robić? – Kwal

+0

Cześć MattK, dzięki za odpowiedź. Dla mojego doświadczenia w nim, ilekroć dodaję SymmetricSecurityBindingElement i GZipMessageEncodingBindingElement do kolekcji elementów wiążących (zapoznaj się z powyższym kodem), wiadomość jest zawsze najpierw zaszyfrowana, a dopiero potem kompresja. Użyłem Fiddlera, by sprawdzić wykorzystanie przepustowości. Jest tak ogromny po skompresowaniu zaszyfrowanej wiadomości. Nie wiem jak to rozwiązać. Przy okazji, link, który mi wysłałeś, możesz mi pokazać, gdzie jest ta część, która szyfruje wiadomość? Nie mogę znaleźć kodu do zaszyfrowania. Dzięki MattK. –

Powiązane problemy