2009-10-08 6 views
5

me enfrento a un problema aquí. Estoy haciendo un proyecto cliente/servidor, que es servicio web WCF llamando para obtener datos. Debido a los enormes datos de transferencia, tengo que cambiar mi enlace a enlace personalizado programáticamente (no por archivo de configuración)¿Cómo construir un enlace personalizado teniendo WSHttpBinding de seguridad y compresión GZip?

Yo soy creando un nuevo enlace definido por el usuario también conocido como enlace personalizado. ejemplo de la clase es:

public class MyCustomBinding : CustomBinding  

y anular una función BindingElementCollection:

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

lo que estoy tratando de hacer es copiar todas las configuraciones desde wsHttpBinding, y añadir en gzip como el codificador mensaje. Comprimir una información cifrada dará lugar a un tamaño mayor del tamaño de datos originales. esto se debe a que SymmetricSecurityBindingElement de WSHttpBinding hizo el cifrado. ¿Cómo hacer esto de la manera correcta? Quiero la configuración de seguridad de wshttpbinding, y también la gzip para trabajar.

Respuesta

0

Usted debe ser capaz de utilizar sólo un comportamiento para aplicar compresión en consecuencia:

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

EDIT: quizás también debería incluir el enlace a la compresión basada Comportamiento:

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

+0

Hola, gracias por la respuesta. Había visto el enlace que me diste previamente. Lo siento, pero no puedo ver dónde está el lugar utilizando el mismo comportamiento de seguridad de WSHttpBinding? ¿El enlace que has proporcionado incluye el cifrado? –

+0

Según mi experiencia con el código al que me vinculé, aunque todo el mensaje cifrado está comprimido, no dio lugar a un tamaño de mensaje más grande, sino que redujo el tamaño del mensaje. El mensaje está en su núcleo es simplemente SOAP (es decir, texto detallado), por lo que al utilizar la compresión debería ver ganancias. ¿Estoy entendiendo mal lo que quieres hacer? – Kwal

+0

Hola MattK, gracias por la respuesta. Para mi experiencia en él, cada vez que agrego SymmetricSecurityBindingElement y GZipMessageEncodingBindingElement en la colección de elementos de enlace (consulte el código anterior), el mensaje siempre se cifra al principio, luego solo se procede a comprimir. Yo había usado Fiddler para verificar el uso del ancho de banda. Es tan grande después de comprimir un mensaje cifrado. No sé cómo resolver esto. Por cierto, el enlace que me enviaste, ¿puedes mostrarme dónde está la parte que encripta el mensaje? No puedo encontrar el código para encriptar. Gracias MattK. –

Cuestiones relacionadas