2009-05-09 20 views
7

¿Cómo se asegura un servicio web WCF habilitado para Silverlight con SSL? Intenté configurarlo de manera similar a un servicio WCF regular protegido por SSL, pero parece que no funciona. ¿Qué configura en el Web.Config, y qué establece en el ServiceReferences.ClientConfig de Silverlight?¿Cómo asegurar un servicio web WCF habilitado para Silverlight con SSL?

Me di cuenta de que en el archivo ServiceReferences.ClientConfig de la aplicación del cliente de Silverlight, la etiqueta "Encuadernación" solo permite basicHttpBinding y NO wsHttpBinding. ¿Esto significa que no puede asegurar un Servicio WCF habilitado para Silverlight? Si es así, ¿hay mejores enfoques para asegurarlo?

Respuesta

-2

WS * no es compatible con Silverlight - básicamente cambiar la dirección URL en la configuración del cliente para ser un https: // url - eso es todo lo que puede hacer

+0

he intentado eso, el servicio sería entonces lo conecte. – Yttrium

3

en el archivo de ServiceReferences.ClientConfig el Silverlight aplicación cliente que la etiqueta "Encuadernación" solo permite basicHttpBinding y NO wsHttpBinding. ¿Esto significa que no puede asegurar un Servicio WCF habilitado para Silverlight?

No, no significa eso. Puede tener un basicHttpBinding y aún asignarle seguridad de nivel de transporte (HTTPS con SSL). Eso no debería ser un problema.

Marc

PD: Muchas uno de esos enlaces que da una visión más clara y el proverbial "AHA!" :-)

+0

Gracias! Aunque estoy confundido en cuanto a qué pongo en el archivo Web.Config que aloja el servicio? ¿Es solo básicoHttpBinding con seguridad de transporte? Intenté eso y devuelve un error "No encontrado". – Yttrium

+0

¿Su servidor que aloja el servicio tiene un certificado SSL instalado y todo? Si desea utilizar seguridad de nivel de transporte SSL, SSL en el nivel de transporte debe configurarse correctamente de antemano. –

+0

Sí, el sitio tiene un SSL que funciona, puedo acceder a un servicio .ASMX usando seguridad de transporte y apuntando a https en el archivo de configuración de Silverlight. Pero no puedo, por mi vida, conseguir que encuentre un servicio WFC habilitado para Silverlight a través de https con seguridad de transporte. – Yttrium

11

Hay tres lugares clave que config Es necesario usar https en mis propias aplicaciones.

Web.config

En la etiqueta de comportamiento incluyen esta línea:

<serviceMetadata httpsGetEnabled="true"/> 

Para el punto final MEX, asegúrese de usar el protocolo https:

<endpoint address="mex" binding="mexHttpsBinding" 
      contract="IMetadataExchange" /> 

Crear una enlace personalizado.La parte importante es la seguridad en el transporte:

<basicHttpBinding> 
    <binding name="myServicesBinding"> 
     <security mode="Transport"/> 
    </binding> 
    </basicHttpBinding> 

También puede incluir la materia de autorización de costumbre:

<authorization> 
    <allow users="?"/> 
    <deny users="*"/> 
</authorization> 

Silverlight

En el extremo Silverlight, o bien señalar el ServiceReference en el momento servicio seguro o configure las conexiones manualmente en el código. ServiceReferences.ClientConfig el archivo debe tener la materia de la seguridad en ella:

<security mode="Transport"/> 

Y la versión de código es el siguiente:

BasicHttpBinding b = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 

Hay cosas probablemente más complejos que se pueden hacer, pero esto debe ser lo suficientemente bueno para la mayoría de la gente.

3

crear así un servicio web WCF habilitado para Silverlight usando SSL que tiene que hacer los siguientes pasos:

  1. crear el servicio web WCF Silverlight habilitado estándar utilizando Visual Studio 2010
  2. Cambio 3 lugares de webconfig. xml:

    a. En serviceMetadata, cambie httpGetEnabled a httpsGetEnabled de esta manera:

    <behaviors > 
        <serviceBehaviors > 
        <behavior name="" > 
         <serviceMetadata httpsGetEnabled="true" /> 
         <serviceDebug includeExceptionDetailInFaults="false" /> 
        </behavior> 
        </serviceBehaviors> 
    </behaviors> 
    

    b. En el enlace de cambio httpTransport a httpsTransport:

    <bindings> 
        <customBinding> 
        <binding name="Project.Web.YourService.customBinding0"> 
         <binaryMessageEncoding/> 
         <httpsTransport/> 
        </binding> 
        </customBinding> 
    </bindings> 
    

    c. en cambio vinculante punto final = "mexHttpBinding" a la unión = "mexHttpsBinding":

    <service name="Project.Web.YourService.YourService"> 
        <endpoint address="" binding="customBinding" bindingConfiguration="Project.Web.YourService.customBinding0" 
        contract="Project.Web.YourService.YourService" /> 
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
    </service> 
    
  3. No utilice ServiceReferences.ClientConfig. Crear todo en código detrás - es fácil de implementar en el servidor:

    CustomBinding binding = new CustomBinding(new BinaryMessageEncodingBindingElement(), new HttpsTransportBindingElement());   
    YourServiceReference.YourServiceClient service = new YourServiceReference.YourServiceClient (binding, new EndpointAddress(new Uri("https:yourhostname/YourService.svc").AbsoluteUri));   
    service.YourMethodCompleted += new EventHandler<YourServiceReference.YourMethodCompleted EventArgs>(service_YourMethodCompleted); 
    service.YourMethodAsync(); 
    
Cuestiones relacionadas