2008-11-19 10 views

Respuesta

5

¿Qué versión de Visual Studio estás usando?

VS2008 incorpora la funcionalidad de la herramienta svcutil. Para generar el proxy, haga clic en el Explorador de soluciones y seleccione 'Agregar referencia de servicio', luego puede ingresar la URL del servidor, darle un nombre al espacio de nombres y listo.

Es posible que desee ampliar su pregunta para proporcionar más detalles de lo que quiere lograr.

4

La herramienta svcutil.exe (y la funcionalidad equivalente en VS2008) se utilizan normalmente como esto: -

la que apunte a una descripción del servicio (un documento WSDL) y genera código del lado del cliente y de configuración para lo ayuda a crear un cliente que pueda comunicarse con los servicios descritos en el WSDL. Las herramientas también pueden hacer otras cosas, pero para esto se usan con más frecuencia. Supongo que es este uso de svcutil.exe al que te refieres.

Así que si tiene un servicio existente, tal vez escrito usando alguna otra pila (no WCF), usar svcutil hace su vida más fácil de lo que sería. Pero recuerda, el código y la configuración generados podrían haber sido escritos por ti. Normalmente, la configuración parece detallada porque la herramienta pone todos los valores predeterminados allí. Si escribió la configuración usted mismo probablemente podría omitir la mayor parte.

Si está escribiendo cliente y servicio usted mismo, usando WCF, no hay casi ninguna razón por la que usaría svcutil.exe. Cuando define su [ServiceContract] puede usar esa misma definición tanto en el cliente como en el servicio. Cuando crea su archivo de configuración de servicio, es un trabajo simple crear un archivo de configuración de cliente basado en él; la mayoría del contenido es el mismo.

Al final, no hay sustituto para entender lo que significa realmente todo el código/config generado por svcutil.exe. Entonces estarás en posición de trabajar sin eso.

7

Una forma de construir su cliente WCF sin usar svcutil.exe es utilizar ChannelFactory. Lo que tendría que hacer es construir la interfaz del servicio WCF en un ensamblaje separado de la implementación del servicio. A continuación, puede hacer referencia a ese conjunto de interfaz desde su cliente y su servicio.

Una vez que tenga la referencia, se puede utilizar el siguiente código para crear un cliente WCF:

var factory = new ChannelFactory<IMyWcfService>(); 
var wcfClient = factory.CreateChannel(); 
bool closedSuccessfully = false; 

try 
{ 
    // Now you can make calls on the wcfClient object 
    ((ICommunicationObject)wcfClient).Close(); 
    closedSuccessfully = true; 
} 
finally 
{ 
    if (!closedSuccessfully) 
    { 
     ((ICommunicationObject)wcfClient).Abort(); 
    } 
} 

Nota de la rutina de limpieza. No puede usar una instrucción de uso de manera confiable para limpiar la variable wcfClient. Si lo hace, y el objeto está en estado de error, recibirá una excepción cuando el bloque using() salga del alcance y se ejecute Dispose() en la variable wcfClient. Ver Jesse Ezell's blog

+0

+1. Esto parece ser lo que estaba buscando. ¿ChannelFactory leerá todas las configuraciones fuera de App.config como lo haría una clase de proxy normal? –

+0

Nota: La llamada a CreateChannel devolverá algo que implemente IMyWcfService. Esto no tendrá los métodos Cerrar y Abortar; debe llamarlos directamente de fábrica –

+0

Sí, ChannelFactory leerá las configuraciones desde app.config. Creo que una de las sobrecargas le permite especificar qué configuración de cliente usar por nombre. También puede hacer todo en código pasando un enlace para que el canal lo use e ignore la configuración por completo. Con respecto al cierre del proxy del cliente (IMyWcfService), puede convertirlo a ICommunicationObject y llamar a Close() en ese objeto. –

Cuestiones relacionadas