Escribo un cliente en un servicio WCF. Esta es una aplicación única en un sistema más grande que incluye módulos escritos en C#, C++, VB y Java. Todas las aplicaciones comparten mecanismos comunes de configuración y registro, independientemente del idioma en el que fueron escritos..NET: implementación de un cliente WCF, sin app.config
Me gustaría descubrir cómo crear la aplicación cliente para que se ejecute sin un app.config. ¿Por qué? Debido a que la mayor parte de lo que se encuentra en la aplicación.config es una repetición que los administradores del sistema no deberían poder cambiar, y la configuración que los administradores de sistemas deberían poder cambiar debería estar en la configuración de todo el sistema, y no en un archivo app.config sentado en el directorio bin.
El caso en cuestión - app.config del cliente Actualmente tiene este aspecto:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="WSHttpBinding_ICourierService">
<security defaultAlgorithmSuite="Default" authenticationMode="SecureConversation"
...
</security>
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Default" writeEncoding="utf-8">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport manualAddressing="false"
...
useDefaultWebProxy="true" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://localhost:57102/MyService.svc"
...
>
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
Es un montón de texto modelo opaco que los administradores de sistemas no deberían tener que tratar. La mayor parte fue insertada por Visual Studio. Hice un cambio en el archivo: aumenté el tamaño máximo en <readerQuotas/>
. Pero ese es un cambio con el que no quiero que jueguen los administradores de sistemas. Y no hay nada más en el archivo con el que quiero que los administradores de sistemas entren en problemas excepto por el <endpoint address=""/>
.
Y estoy sacando la dirección del punto final de la configuración de todo el sistema y configurándola en código. No hay nada en este archivo que deba ser editable por el usuario.
Entonces, ¿cómo configuro las cosas para no tener que tenerlas?
¿Puedo incrustarlo como un recurso en el ensamblado y engancharme en el proceso de carga de app.config, del mismo modo que hago con los archivos DLL necesarios?
¿Es la única opción para crear código para configurar cosas, la forma en que estoy usando el código para establecer la dirección del punto final? Crear los enlaces necesarios, etc., en el código? ¿Cómo, entonces, sé qué código escribir, dados estos fragmentos de XML opaco?
Estaba yo pensando que SysAdmins debería ser capaz de cambiar cosas como los ajustes del servicio WCF, tonto conmigo. – ChrisBint
¿Qué tipo de configuración? URL? Ciertamente. Vinculaciones? ¿Por qué? Estoy creando un cliente para hablar con un servicio que se ejecuta en IIS. No es necesario permitir que los administradores del sistema cambien el enlace a otro que no sea HTTP. –
¿Qué hay de los nombres de host y todo lo relacionado con hablar con el servicio. – ChrisBint