2011-10-15 12 views
5

Un par de preguntas muy básicas. Soy nuevo en WCF y estoy construyendo una aplicación que tiene un proyecto de servicio, un proyecto de aplicación web y algunos proyectos de biblioteca de clase que utilizo para lógica empresarial, etc.Agregar referencias de servicio WCF a varios proyectos

Estoy alojando el WCF localmente en mi IIS y tratando de agregar referencias de servicio a los proyectos.

Pregunta 1. Al agregar referencias, ¿debo agregar una referencia de servicio a cada proyecto por separado o hay una manera en que puedo compartir la misma referencia de servicio en todos los proyectos?

La razón por la que pregunto es porque si agrego referencias separadas, cada referencia obtiene su propio espacio de nombres, y cuando tengo que pasar el mismo objeto entre los proyectos, obtengo una InvalidCastException porque cada ServiceClient tiene un espacio de nombres diferente.

Ejemplo -.. Site.Business.XDataService.XDataServiceClient() GetItem() no es lo mismo que Site.Web.XDataService.XDataServiceClient() GetItem()

Pregunta 2. que especifica la dirección del servicio local en la clase que implementa la interfaz de servicio de la siguiente manera -

[ServiceBehavior (Espacio de nombres = "http: // localhost: 801/XDataService.svc", IncludeExceptionDetailInFaul ts = verdadero)]

Esto no parece correcto. Si muevo mi código a un entorno diferente/vivo, obviamente tendré que cambiar esta parte nuevamente y volver a compilar. ¿Dónde puedo especificar esto (Web.Config?) Para poder cambiar esta dirección sin tener que reconstruir mi aplicación?

Apreciar cualquier tipo de idea. Gracias!

Respuesta

6

Respondiendo a la primera pregunta, puede poner la referencia de servicio en su propio proyecto y hacer referencia a ese proyecto en todos los demás proyectos que necesiten acceder a ese servicio.

Básicamente todo la referencia de servicio es es un trozo de código .NET - (!) De espacio de nombres, clase, etc.

Mejor aún para un servicio WCF que también consigue una interfaz tirado de forma gratuita (más o menos la misma interfaz que usted definió para su servicio) para que pueda hacer cosas buenas en términos de inyección de dependencia haciendo más fácil las pruebas, etc.

+0

Gracias por la explicación. Pero si el proyecto WCF también está en la misma aplicación, ¿me recomendaría que creara dos proyectos, uno sería el servidor de servicios donde se encuentra todo el código y el otro un cliente de servicio que estoy utilizando como referencia para los otros proyectos? ? – Kalyan

+1

Sí, dos proyectos y sí un cliente de servicio al que hace referencia en sus otros proyectos – Murph

4

Primera pregunta: el servicio es como cualquier otro código. Por ejemplo, código de acceso a la base de datos. ¿Debería poner eso en cada proyecto que necesita acceder a su base de datos? No, deberías ponerlo en un proyecto al que esos otros proyectos puedan hacer referencia.

En cuanto a su segunda pregunta, está especificando un espacio de nombres, pero espero que piense que está especificando una dirección de punto final de servicio. El espacio de nombres es como un espacio de nombres de código C#, esencialmente proporciona una mayor identificación y claridad en caso de que tenga varios objetos con el mismo nombre. Normalmente usarías un espacio de nombres como http://mywebsite.com/MyService/VersionNumberIfRequired o similar.

La dirección de se especifica en la configuración.La dirección cambiará dependiendo de la ubicación del entorno/implementación; el espacio de nombres no debería.

+0

¡Gracias! Sabía que me estaba perdiendo algo con respecto a la Pregunta 2. Seguiré tu sugerencia. – Kalyan

Cuestiones relacionadas