Hola comunidad, estoy desarrollando una aplicación utilizando la tecnología WCF con n capas. Esta tecnología para mí es nueva y tengo algunas dudas:
Mi aplicación va trabajar en varios ambientes, lo normal es en red local, habrá una parte de negocio que se accede con cliente windows (en red local) y otro con cliente página Web, en el caso de los pedidos (cliente que realizan pedidos a través de Web).
Mi dudas son que protocolo/transporte usar con WCF, teniendo en cuenta que tengo que propagar credenciales usuario/password ya que la capa de negocio casi todos sus métodos cheque la autenticación y el rol del usuario autenticado.
He estado haciendo pruebas y he utilizado el protocolo NetTcpBinding para clientes en red local y con un Host tipo consola de momento. El resultado no me agrada demasiado, pues en formularios como artículos donde muestro datos del dicho artículo, tarifas y sus proveedores, ya optimizado, no va lo rápido que uno espera cuando se avanza por sus registros, es decir, se nota que está en remoto, el cliente para conectar en red local con el Host me obliga enviar certificado X.509 con este protocolo, sino me deniega la conexión el Host, ¿habría posibilidad de no utilizar certificado para no instalar en todos los equipos cliente?, teniendo cuenta que debo de propagar las credenciales, quizás tanta protección ralentiza la comunicación ¿no?.
También he probado el protocolo WSHttpBinding, para realizar la comunicación mediante dirección http\\www. (atraves de internet o intranet) y utilizando el mismo cliente windows y mismo Host (tipo consula), bueno la comuncación sí que es lenta (no viable), no se si es por el tipo de protocolo, cliente o host.
Que tipo de protocolo/transporte usar según mi situación para que vaya lo más optimizado posible, teniendo en cuenta que almenos tengo que propagar credenciales de tipo usuario/password.
Configuración de archivo del Host:
<endpoint address="net.tcp://localhost:1133/Servicios/mex"
contract=" Servicios.ServiceContracts.IArticulos"
binding="netTcpBinding"
bindingConfiguration="MiBindingTCP" />
<netTcpBinding>
<binding name="MiBindingTCP" maxReceivedMessageSize="5000000">
<readerQuotas maxStringContentLength="2000000" />
<security mode="Message" >
<message clientCredentialType="UserName" />
</security>
</binding>
</netTcpBinding>
<behavior name="BehaviorSeguridadAutorizacion" >
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true" />
<serviceAuthorization principalPermissionMode="Custom">
<authorizationPolicies>
<add policyType="ServiceImplementation.CustomAutiruzacion, Servicios.ServiceImplementation"/>
</authorizationPolicies>
</serviceAuthorization >
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ServiceImplementation.CustomUserNameValidator, Servicios.ServiceImplementation" />
<serviceCertificate findValue="WCF" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
Un saludo, A. Ortega