Cliente WCF detras de un ISA Server o un ProxyServer??


Como siempre en esas cosas de la vida en un cliente requeriamos que uno de nuestros programas hechos con .NET, de hecho con .NET 3.5 y WCF, como cliente acceda a un Servidor, claro este cliente esta completamente bajo el control de un ISA Server 2004, y cuando queria acceder al servidor me daba el siguiente error:

When attempting to invoke any of the generated client class methods, we recieve the following error: "The remote server returned an unexpected response: (407) Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied. )."

Pero el resto de cosas funcionaban bien!! Internet Explorer, otros programas con acceso a la red y demas!! Que estaba haciendo mal??
Primero pues lo mas evidente, la configuracion de mi cliente en la parte WCF, si ustedes ven en la parte de la configuracion del binding en la seccion transport hay una propiedad llamada proxyCredentialsType en donde puedes decir que credenciales se pasan, claro pasa ISA Server se deben usar las credenciales Windows asi es que intente poner ahi la opcion y pues no no funciono... Mi binding quedaba algo asi

<binding name="wsData" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="4194304" maxBufferPoolSize="4194304" maxReceivedMessageSize="4194304"
messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="128" maxStringContentLength="10000000"
maxArrayLength="65536" maxBytesPerRead="8192" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientcredentialtype="None">proxyCredentialType="Windows"</strong>
realm="" />
<message clientcredentialtype="UserName" algorithmsuite="Default">
</security>
</binding>


Dando vueltas por ahi algunas personas tenian el mismo problema, pero lo mas frustrante es que nadie tenia una respuesta para esto, asi es que segui dando vueltas y en un foro encontre a alguien que si lo logro pero claro despues de una larga charla se llego a la conclusión de que se debia cambiar el machine.config para que se usen las credenciales por defecto, y esto se logra incluyendo estas lineas:

<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
</defaultProxy>
</system.net>

Entonces con esto es mejor reiniciar la computadora despues de esto magicamente el error desaparece!!

Una acotacion, resulta que el machine.config hay que buscarlo en la carpeta del framework 2.0, por que?? Recuerden que tanto Framework 3.0 y 3.5 son agregados al 2.0 por lo tanto el Framework base es 2.0, si no me creen busquen el machine.config en los otros folders y cuando lo encuentren miren detenidamente las secciones que estan al ultimo...

Ojala les sirva!!

4 comments:

Danny said...

Muchas gracias, jamas lo hubiera sospechado.

Saludos desde Chile.

Anonymous said...

Hola Francisco, gusto en conocerte, recurro a ti, en vista de tu experiencia a ver si me puedes ayudar, estoy buscando información de como trabaja internamente el WORKFLOW, me refiero si se modifica a medida que se incluyen tareas y como se pueden personalizar las plantillas del Visual Studio 2008 Team Fundation Server Power Tool bajo metodologia Scrum. Quisiera saber si me puedes indicar algun material donde pueda encontrar mayor información, esto es para la empresa donde trabajo y no logro encontrar mucha información. Mucho te agradezco tu ayuda. Saludos,

Fco Lomas said...

Hola Lucy! Un gusto igual, mira si hay como customizar y mucho a Team Foundation, recuerda que Scrum es solo una plantilla mas que igual puede ser customizada, mira este link http://blogs.msdn.com/team_foundation/archive/2005/03/16/396917.aspx y este http://msmvps.com/blogs/vstsblog/archive/2007/07/07/starting-using-custom-work-item-controls.aspx, mira como workflow estrictamente no funciona pero si puedes customizar para que parezca uno, eso lo logras modificando los workitems para que depende del cambio de estado vayan a uno u otro lugar, tratare de acer un post sobre esto...

Mario said...

Muchas gracias! Me has resuelto un gran problema.