Como configurar diferentes URIs por entorno para los servicios en Silverlight 4

por Admin el 2/26/2011 5:31:00 AM

Extraido del blog de Tim Heuer, añado a continuación la traducción del texto con su solución para resolver el problema de establecer diferentes URIs por entorno para los servicios en Silverlight utilizando compilación condicional, de forma que no haya que tocar el fichero ServiceReferences.ClientConfig antes  o después de compilar para un entorno diferente al de desarrollo.

En primer lugar, deben incluirse en el fichero ServiceReferences.ClientConfig las diferentes URIs por entorno:

[code]

 <configuration>

     <system.serviceModel>

         <bindings>

             <customBinding>

                 <binding name="CustomBinding_HelloWorldService">

                     <binaryMessageEncoding />

                     <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />

                 </binding>

                 <binding name="StagingServiceBinding">

                     <binaryMessageEncoding />

                     <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />

                 </binding>

                 <binding name="ProductionServiceBinding">

                     <binaryMessageEncoding />

                     <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />

                 </binding>

             </customBinding>

         </bindings>

         <client>

             <endpoint address="http://localhost:40473/HelloWorldService.svc"

                 binding="customBinding" bindingConfiguration="CustomBinding_HelloWorldService"

                 contract="HelloServices.HelloWorldService" name="CustomBinding_HelloWorldService" />

             <endpoint address="http://localhost:40848/HelloWorldService.svc"

                 binding="customBinding" bindingConfiguration="StagingServiceBinding"

                 contract="HelloServices.HelloWorldService" name="StagingServiceBinding" />

             <endpoint address="http://localhost:40849/HelloWorldService.svc"

                 binding="customBinding" bindingConfiguration="ProductionServiceBinding"

                 contract="HelloServices.HelloWorldService" name="ProductionServiceBinding" />

         </client>

     </system.serviceModel>

 </configuration>

[/code]
Para usar cualquiera de las configuraciones distinta de la configuración por defecto, debemos usar el constructor que acepta como parametro el nombre del endpoint:


HelloWorldServiceClient client = class="kwrd">new HelloWorldServiceClient(class="str">"StagingServiceBinding");


Por ultimo, para elegir el endpoint por entorno, podemos definir constantes del compilador para cada perfil de compilación, y utilizar el constructor de la siguiente manera:


"lnum1" class="lnum"> 1: class="kwrd">string _endpointName = class="str">"RelativeBinding"; "lnum2" class="lnum"> 2:  "lnum3" class="lnum"> 3: class="preproc">#if PRODUCTION "lnum4" class="lnum"> 4: _endpointName = class="str">"ProductionServiceBinding"; "lnum5" class="lnum"> 5: class="preproc">#endif "lnum6" class="lnum"> 6:  "lnum7" class="lnum"> 7: class="preproc">#if STAGING "lnum8" class="lnum"> 8: _endpointName = class="str">"StagingServiceBinding"; "lnum9" class="lnum"> 9: class="preproc">#endif "lnum10" class="lnum"> 10:  "lnum11" class="lnum"> 11: HelloWorldServiceClient client = class="kwrd">new HelloWorldServiceClient(_endpointName);

 

Tags:

Silverlight

Rutas relativas para las referencias de servicios en Silverlight 4

por Admin el 2/26/2011 5:23:00 AM

El archivo ServiceReferences.clientconfig donde se indican las URIs de los servicios a usar por la aplicación Silverlight se "compilan" (realmente el archivo xap es un zip que incluye este fichero, y que se puede modificar) dentro del archivo xap, y no tienen un procedimiento "de fabrica" para distinguir entornos de desarrollo / pre / producción. En el caso de que el servicio web este ubicado en la misma aplicacion web que el modulo Silverlight, es posible usar una ruta relativa en el fichero de configuración para el servicio, con lo que evitamos el problema de tener que cambiar las URIs por entorno. Por ejemplo:

   1: <endpoint address="../HelloWorldService.svc"
   2:                 binding="customBinding" bindingConfiguration="RelativeBinding"
   3:                 contract="HelloServices.HelloWorldService" name="RelativeBinding" />

Visto en el blog de Tim Heuer