miércoles, 3 de marzo de 2010

Configuración para Servicio WCF y F5

Recientemente, tuve que exponer un Servicio WCF (Windows Communication Fundation) a través de F5 (BIG IP), donde la comunicación desde el cliente al F5 es a través de HTTPS y del F5 al el WFC a través de HTTP.

El verdadero reto cuando trabajas con WCF es su configuración y sus múltiples variantes para soportar todo tipo de protocolos, seguridad, identidad, etc. Debido a esto estuve varios días buscando y probando varias configuraciones que cumplieran con mis expectativas.

Primero agrega el atributo [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] a la interfaz del servicio para permitir la conexión cliente-f5-wcf.

Lo siguiente es utilizar la siguiente configuración en el Servicio WCF

<system.serviceModel> <services> <service behaviorConfiguration="BIGIPBehavior" name="WCF_Service.ServiceDemo" > <endpoint address="" binding="wsHttpBinding" bindingConfiguration="BIGIPBinding" contract="WCF_Service.IServiceDemo"> </endpoint> </service> </services> <bindings> <wsHttpBinding> <binding name="BIGIPBinding" closeTimeout="05:00:00" maxBufferPoolSize="10000000" maxReceivedMessageSize="1000000000" openTimeout="05:00:00" receiveTimeout="05:00:00" sendTimeout="05:00:00"> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" /> <message clientCredentialType="Windows" establishSecurityContext="false" negotiateServiceCredential="true" /> </security> </binding> </wsHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="BIGIPBehavior"> <serviceMetadata httpGetEnabled="True"/> <serviceDebug includeExceptionDetailInFaults="true"/> <dataContractSerializer maxItemsInObjectGraph="1000000000" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>

Finalmente, esta es la configuración a utilizar en el cliente

<system .servicemodel=""> <bindings> <wshttpbinding> <binding closetimeout="05:00:00" maxbufferpoolsize="100000000" maxreceivedmessagesize="1000000000" name="BIGIPBinding" opentimeout="05:00:00" receivetimeout="05:00:00" sendtimeout="05:00:00"> <security mode="Transport"> <transport clientcredentialtype="None" proxycredentialtype="None"> <message clientcredentialtype="Windows" establishsecuritycontext="false" negotiateservicecredential="true"> </message></transport></security> <readerquotas maxarraylength="1000000" maxbytesperread="1000000" maxdepth="1000000" maxnametablecharcount="1000000" maxstringcontentlength="1000000000"> </readerquotas></binding> </wshttpbinding> </bindings> <client> <endpoint address="https://test.mytest.com/WCF_BIG_IP_DEMO/ServiceDemo.svc" binding="wsHttpBinding" bindingconfiguration="BIGIPBinding" contract="ServiceDemoReference.IServiceDemo" name=""> </endpoint> </client> </system>

Nota: Los valores de los atributos de ambas configuraciones deben ser cambiados a la necesidad del proyecto.

Referencias

No hay comentarios:

Publicar un comentario