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