none
Rest sobre Https: "The conection was reset" RRS feed

  • Pregunta

  • Hola, estoy intentando exponer un RESTful webservice desde codigo c# en un proyecto estándar. Sobre  HTTP funciona sin problemas, pero necesito que los datos vayan cifrados, por lo que decidí utilizar HTTPS, pero cuando lo levanto e intento acceder obtengo "The connection was reset". Tengo que hacerlo todo desde código, es decir, nopuedo (o debería evitar) configurar un certificado SSL a través de netsh.

    Como dije, no necesito credenciales, simplemente que la conexión vaya cifrada. A contuniación pongo el código:

    ILogin: es el contrato, con su atributo [ServiceContract]

    LoginService: clase que implementa ILogin

     

    WebServiceHost serviceHost = new WebServiceHost(typeof(LoginService));
    WebHttpBinding wb = new WebHttpBinding();
    wb.Security.Mode = WebHttpSecurityMode.Transport;
    wb.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
    serviceHost.AddServiceEndpoint(typeof(ILogin), wb, new Uri("https://localhost:443/"));
    serviceHost.Open();
    
    _activeServices.Enqueue(serviceHost);
    

    Gracias

     


    martes, 17 de enero de 2012 13:25

Respuestas

Todas las respuestas

  • Hola Mario,

     

    si tienes la opción de hacerlo por config (personalmente creo que es mejor opción) podrías echarle un ojo a este tutorial paso a paso para crear servicios restful con WCF. Usa la plantilla de proyecto que puedes obtener por ExtensionManager:

    http://blog.sublogic.com/2010/07/15/making-a-wcf-rest-stand-alone-service-exe-from-scratch-part-1-of-4-creating-the-minimal-bare-service/

    Por otro lado veo que este tema se ha tratado en otro foro y debes tener el servicio hospedado en IIS:

    http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/6907d765-7d4c-48e8-9e29-3ac5b4b9c405/ 

     


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda



    Blog: http://jimenezroda.wordpress.com
    Follow jimenezroda on Twitter
    martes, 17 de enero de 2012 16:22
  • Hola y gracias por contestar.

    Ya vi el tutorial pero aun por app.config, no veo la solución con https, de todas formas, tengo que hacerlo desde código.

     

    Eché un ojo a la pregunta, el buscaba exactamente lo mismo que yo, pero parece que al final no encontró solución:

    • "I would like to use SSL with WCF and without using IIS in a RESTful solution."

     

    ¿Realmente no hay ninguna forma de hacer esto? Solo quiero mandar datos encriptados a un consumidor java script para que no me los capture un sniffer :(

     

    Gracias
    martes, 17 de enero de 2012 17:35
  • Hola Mario,

    bueno, aplicar SSL es aplicar seguridad a nivel de transporte. Lo que puedes hacer es usar seguridad a nivel de mensaje (WCF Message Level Security). Eso incluye uso de Certificados (por ejemplo), IssuedToken, Windows o el típico username/password.

    Aquí te dejo un link donde se explican estos tipos de seguridad a nivel de mensaje:

    http://msdn.microsoft.com/en-us/library/ms789036.aspx

     

    Aquí algún ejemplo:

    http://msdn.microsoft.com/en-us/library/ms731884.aspx


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda



    Blog: http://jimenezroda.wordpress.com
    Follow jimenezroda on Twitter
    martes, 17 de enero de 2012 17:47
  • ¿Puedo meter seguridad a nivel de enlace en un servicio RESTful? Me había tirado directamente por HTTPS porque lei esto en msdn:

    "The only way to secure a Web endpoint is to expose it through HTTPS, using transport security. When using message-based security, security information is usually placed in SOAP headers and because the messages sent to non-SOAP endpoints contain no SOAP envelope, there is nowhere to place the security information and you must rely on transport security."

     

    Estoy probandolo de todas formas..

    martes, 17 de enero de 2012 22:44

  • Hola de nuevo, no se de cuantas formas he probado ya y cuantas webs he leido >.< no consigo hacerlo funcionar.

     

    Lo máximo que he tenido es:

     

    WebServiceHost serviceHost = new WebServiceHost(typeof(LoginService),new Uri("http://localhost:8000/"));
    WSHttpBinding wb = new WSHttpBinding();
    wb.Security.Mode = SecurityMode.Message;
    wb.Security.Message.ClientCredentialType = MessageCredentialType.None;
    serviceHost.AddServiceEndpoint(typeof(ILogin), wb, "" );
    serviceHost.Open();<br/>
    

    y obtengo la siguiente excepcion:

    $exception	{"The ChannelDispatcher at 'http://localhost:8000/' with contract(s) '\"ILogin\"' is unable to open its IChannelListener."}	System.Exception {System.InvalidOperationException}
    

    Imagino que es porque no pongo certificado pero no soy capaz de crearlo, no tengo "HttpCfg tool" ni IIS y necesito no tenerlo:S

    miércoles, 18 de enero de 2012 12:34
  • Por si alguien se encuentra con el mismo problema:

    Al final, me he rendido, configuro todo desde IIS y todo es mucho mas facil.


    martes, 14 de febrero de 2012 15:02