Herramientas de usuario

Herramientas del sitio


sp:wcf

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
sp:wcf [2009/03/05 11:31]
alfred
sp:wcf [2020/05/09 09:25] (actual)
Línea 323: Línea 323:
   </​system.serviceModel>​   </​system.serviceModel>​
 </​code>​ </​code>​
 +
 +
  
  
Línea 333: Línea 335:
 ==== Autentificación en IIS ==== ==== Autentificación en IIS ====
 === Conexión segura en IIS === === Conexión segura en IIS ===
-Las conexiones seguras en IIS se basan en SSL y es por ello que tenemos que tenerlo activo en nuestro servidor. Una vez esto sea así, configuraremos la seguridad a partir de la capa de transporte, sin ningún tipo de validación de usuario... Todavía \\ \\ +Las conexiones seguras en IIS se basan en SSL y es por ello que tenemos que tenerlo ​[[code:​tools#​activar_ssl|activo en nuestro servidor]]. Una vez esto sea así, configuraremos la seguridad a partir de la capa de transporte, sin ningún tipo de validación de usuario... Todavía\\ \\ 
 Es de remarcar el hecho que en la configuración tengamos que tener ''​httpsGetEnabled''​ (en vez de ''​httpGetEnabled''​) a ''​true''​. ​ Es de remarcar el hecho que en la configuración tengamos que tener ''​httpsGetEnabled''​ (en vez de ''​httpGetEnabled''​) a ''​true''​. ​
 <code xml> <code xml>
Línea 372: Línea 374:
  
  
-==== Creación de un cliente ​en un escenario seguro ====+ 
 + 
 + 
 + 
 + 
 + 
 +==== Creación de un cliente ​para un escenario seguro ==== 
 +=== Configuración para un canal cifrado === 
 +Para desarrollar un cliente que acceda a un servicio por un canal cifrado en SSL es necesario que en el archivo de configuración del cliente exista, en el apartado ''​binding''​ utilizado un apartado de seguridad, en este caso en modo ''​Transport''​ con un ''​clientCredentialType''​ como ''​Basic''​. \\ \\  
 +En el siguiente ejemplo la aplicación accede por https a un servicio con validación de usuario (de ahí el ''​message clientCredentialType="​UserName"''​):​ 
 +<code xml> 
 +<​system.serviceModel>​ 
 +    <​bindings>​ 
 +        <​basicHttpBinding>​ 
 +            <binding name="​BasicHttpBinding_PIUServiceVi_Document"​ > 
 +                <​security mode="​Transport">​ 
 +                    <​transport clientCredentialType="​Basic"​ proxyCredentialType="​None"​ realm=""​ /> 
 +                    <message clientCredentialType="​UserName"​ algorithmSuite="​Default"​ /> 
 +                </​security>​ 
 +            </​binding>​ 
 +        </​basicHttpBinding>​ 
 +    </​bindings>​ 
 +    <​client>​ 
 +        <​endpoint address="​https://​www.atm.cat:​8080/​piu/​previsiones.svc"​ 
 +            binding="​basicHttpBinding"​ bindingConfiguration="​BasicHttpBinding_PIUServiceVi_Document"​ 
 +            contract="​ServiceReference1.PIUServiceVi_Document"​ name="​BasicHttpBinding_PIUServiceVi_Document"​ /> 
 +    </​client>​ 
 +</​system.serviceModel>​ 
 +</​code>​ 
 + 
 +=== Validación del cliente === 
 +En el apartado anterior (configuración para un canal cifrado) vemos la porción del archivo de configuración que se requiere para que el cliente acceda a un servicio que haga una petición de validación de usuario. Se agrega en el apartado de seguridad lo siguiente... 
 +<code xml> 
 +<message clientCredentialType="​UserName"​ algorithmSuite="​Default"​ /> 
 +</​code>​ 
 +Pero es necesario indicar qué usuario\password se utilizará, para ello debemos modificar, antes de hacer la conexión con el servicio, la propiedad ''​ClientCredentials''​ del objeto cliente: 
 +<code csharp>​ 
 +ServiceReference1.PIUServiceVi_DocumentClient client = new ServiceReference1.PIUServiceVi_DocumentClient();​ 
 +client.ClientCredentials.UserName.UserName = "​piusbcn";​ 
 +client.ClientCredentials.UserName.Password = "​atmpiubcn";​ 
 +</​code>​ 
 + 
 +=== Saltarse el certificado del servicio === 
 +Cuando desarrollamos con certificados no firmados por una entidad de confianza el motor del cliente no permitirá la conexión por ello debemos escribir el evento de comprovación de certificado:​ 
 +<code csharp>​ 
 +using System.Net;​ 
 +using System.Security.Cryptography.X509Certificates;​ 
 +... 
 +ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(customXertificateValidation);​ 
 +... 
 +private static bool customXertificateValidation(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error) { 
 +    return true; 
 +
 +</​code>​ 
 +===== Otros ===== 
 + 
 + 
 + 
 + 
 +==== Activar la compatibilidad con ASP.NET ==== 
 +A veces necesitamos guardar información del usuario en, por ejemplo, sesiones, pero por defecto no lo podemos hacer simplemente accediendo a ''​System.Web.HttpContext.Current.Session''​. Para poder acceder al contexto web desde un servicio de WCF deberemos hacer dos cosas: 
 +  * Activar la compatibilidad desde el archivo de configuración:​ 
 +<code xml> 
 +<​system.serviceModel>​ 
 +    <​serviceHostingEnvironment aspNetCompatibilityEnabled="​true"​ /> 
 +    ... 
 +</​code>​ 
 +  * Agregar el atributo ''​AspNetCompatibilityRequeriments''​ a la clase del servicio (como ''​Allowed''​):​ 
 +<code csharp>​ 
 +[System.ServiceModel.Activation.AspNetCompatibilityRequirements(RequirementsMode = System.ServiceModel.Activation.AspNetCompatibilityRequirementsMode.Allowed)] 
 +public class PiuService : ISAMERWService { 
 +  ... 
 +</​code>​ 
 + 
  
 ===== Notas ===== ===== Notas =====
Línea 382: Línea 458:
 ... ...
 </​code>​ </​code>​
- +  * Para cambiar el usuario con el que se ejecuta el servicio en IIS deberemos [[sp:​wcf#​activar_la_compatibilidad_con_asp.net|activar la compatibilidad con asp.net]]. 
- +  * Con la instalación de Visual Studio se nos instala una herramienta denominada //Microsoft Service Configuration Editor//, muy útil para editar de una forma clara los archivos de configuración de un proyecto que involucren servicios. Podemos acceder desde //Inicio -> Programas -> SDK -> Tools//.
  
 ==== IIS ==== ==== IIS ====
sp/wcf.1236252690.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)