System.Collections.ListofTips

May 17, 2008

Consumir Web Services con Spring.net

Filed under: Spring.net — José Franco @ 8:14 pm

Bueno, el ejemplo que arme anteriormente, lo publique con el IIS en un directorio virtual llamado WSUserAuthentication

Ahora, vamos a armar un cliente que consuma este WS, sin una Web Refence, sino por spring.net.

Generamos un nuevo proyecto web, tenemos que refenciar a las librerías de Spring, como también a la interfaz de nuestro Web Services y la capa que genere como “TransferObjects”, que tiene el objeto que va a recibir el cliente.

Habría que pensar cómo vamos a hacer, para versiones posteriores, el control de las versiones de los asemblys, en caso de hacer modificaciones en nuestro WS, una alternativa seria colocarlos en la GAC, para olvidarnos de tener que copiar en todos los desarrollos que llamen al WS, la última versión en caso de necesitarla.

En mi caso, genero una carpeta de Configuración, con un Xml de los objetos que consumo en spring, en este caso

<?xml
version=1.0
encoding=utf-8 ?>

<objects
xmlns=http://www.springframework.net >

<description>An example that demonstrates simple IoC features.</description>

<!– Web Services –>

<object
id=UsuarioWS


type=Spring.Web.Services.WebServiceProxyFactory, Spring.Services>

<property


name=ServiceUri


value=http://localhost/WSUserAuthentication/UserServices.asmx

/>

<property


name=ServiceInterface


value=Synnax.Core.WS.UserAuthentication.Entitys.IUserService, Synnax.Core.WS.UserAuthentication.Entitys

/>

</object>

</objects>

Genero un objeto, llamado “UsuarioWS”, que es del tiplo del WebServiceProxyFactory, que especificamos la ServiceUri que es donde tenemos corriendo nuestro WS, con el servicio que insumimos, y la interfaz que implementa.

Definimos el contexto del spring, y la configuracion de los objetos.

<configuration>

<configSections>

<sectionGroup
name=spring>

<section
name=context
type=Spring.Context.Support.ContextHandler, Spring.Core/>

</sectionGroup>

</configSections>

<appSettings/>

<connectionStrings/>

<system.web>

<compilation
debug=false>

<assemblies>

<add
assembly=Spring.Core, Version=1.1.2.20125, Culture=neutral, PublicKeyToken=65E474D141E25E07/>

<add
assembly=Spring.Services, Version=1.1.2.20125, Culture=neutral, PublicKeyToken=65E474D141E25E07/>

<add
assembly=Spring.Web, Version=1.1.2.20125, Culture=neutral, PublicKeyToken=65E474D141E25E07/></assemblies></compilation>

<authentication
mode=Windows/>

</system.web>

<spring>

<context>

<resource
uri=~/Configuration/Objects.xml/>

</context>

</spring>

</configuration>

Y desde la aplicación

IUserService _ws = (IUserService) ContextRegistry.GetContext().GetObject(“UsuarioWS”);

lblMessage.Text = _ws.Test();

Con nuestro metodo, Test, como devuelve un string, no hay que castearlo, encambio en el otro metodo tendriamos que estar usando, los objetos de Transfer Objects.

Les dejo, el ejemplo para que lo vean:

Consumiendo Web Services con Spring

Sepan disculpar, los horrores de ortografía, ya que lo hice rapidito a este post, Saludos!

Correcciones al artículo de spring.net

Filed under: Spring.net — José Franco @ 6:30 pm

Gente, seguramente a los que probaron los que postee de spring.net, al testear el Web Method…


Les habrá tirado esto

El error, fue muy tonto, ya que hice el ejemplo rápido, y no controle todo, fue un error de parte mía… primero y principal, no es el mismo método declarado en la interfaz, nos tendría que quedar algo así

Y ahora si la salida, es coherente

Este ejemplo, no tiene nada de código, ya que fue algo muy rápido, igual lo subí para que lo puedan bajar desde acá

Ejemplo Spring.Net

May 14, 2008

Web Services usando spring.net

Filed under: Spring.net — José Franco @ 12:22 am

Bueno, acá publico un ejemplo simple de un Web Servicess que implementa spring, para levantar servicios virtuales, con una capa de datos también por inyección de código.

Son mis primeras experiencias, así que las quiero compartir con ustedes, las capas que tengo son:

Ahora les explico, no tiene gran funcionalidad este ejemplo, ya que solo lo hice para compartir… y no es para ningún desarrollo real.

Tengo el

Sería el CommonTypes, el objeto que voy a transferir, para este caso no tiene mucho sentido, pero más adelante voy a mostrar como consumir un WS por spring.Net, y en este caso si es útil para saber que voy a recibir.

Así que es una clase sin nada en particular

…..

En el DAO, defino las interfaces, así puedo tener un Sql Implementation, Oracle, Xml, lo que quisiera realmente, no hay ningún secreto por ahora.

Ahora veamos las otras dos capas que nos quedan

En Entitys, es una interfaz del WebServices… en este caso, es muy simple

Y en ServiceImplementation, simplemente hay que implementar y codificarlo.

Bueno ahora vamos a ver, mas sobre este UserService…

Generamos estas propiedades, para asignarle por spring, una instancia del DAO, podría ser de sql, oracle, o lo que quisieran, mientras implementaran la interfaz … Eso es lo que ofrece spring.net

En nuestro método, usamos este DAO que asignamos, para traer “x” dato.

Ahora, solo nos falta configurar el WebServices.

Generen, una carpeta “X”, con un Xml de configuración, en mi caso “Configuration”, y “webServices.xml”.

En este mismo, tenemos que hacer todo el mapping

<?xml
version=1.0
encoding=utf-8 ?>

<objects
xmlns=http://www.springframework.net >

<description>Servicios Expuestos</description>

<object
id=UserServiceAsmx


type=Synnax.Core.WS.UserAuthentication.ServiceImplementation.UserService, Synnax.Core.WS.UserAuthentication.ServiceImplementation >

<property
name=IUser
ref=UserDAO />

</object>

<object
id=UserDAO
type=Synnax.Core.WS.UserAuthentication.DataAccess.SqlImplementation.UserImpl, Synnax.Core.WS.UserAuthentication.DataAccess.SqlImplementation />

<object
id=UserServices
type=Spring.Web.Services.WebServiceExporter, Spring.Web>

<property
name=TargetName
value=UserServiceAsmx/>

<property
name=Namespace
value=http://synnax/services//>

<property
name=Description
value=Web Service de Usuario/>

</object>

</objects>

En sí, configuramos un objeto UserDAO, que apunta a la implementación del DAO que queremos, en este caso una para SqlServer, generamos un Objeto “UserServiceAsmx“, que apunta a la implementación del WS, y como verán le asigno la propiedad IUser, que espera una implementación del DAO, en este caso el UserDAO que configuramos.

Y por ultimo generamos un “UserServices” que como Target tiene nuestro UserServiceAsmx, esto va a levantar un .asmx “virtual”, en este caso sería un UserServices.asmx.

Bueno, como último paso, hay que configurar el Web.Config.

<configuration>

<!– Begin - Necesario para Spring.NET –>

<configSections>

<sectionGroup
name=spring>

<section
name=context
type=Spring.Context.Support.WebContextHandler, Spring.Web/>

</sectionGroup>

</configSections>


</configuration>

Esto siempre va, dentro de System.Web

<system.web>

<!– Begin - Necesario para Spring.NET –>

<httpHandlers>

<add
verb=*
path=*.asmx
type=Spring.Web.Services.WebServiceHandlerFactory, Spring.Web/>

</httpHandlers>

<httpModules>

<add
name=Spring
type=Spring.Context.Support.WebSupportModule, Spring.Web/>

</httpModules>

<!– End - Necesario para Spring.NET –>


</system.web>

Es evidente que hace esto, levanta las peticiones que se hacen para los asmx, y el modulo correspondiente para manejar todo esto.

Y como final, después del nodo de system.web …

</system.web>

<!– Begin - Necesario para Spring.NET –>

<spring>

<context
type=Spring.Context.Support.WebApplicationContext, Spring.Web>

<resource
uri=~/Configuration/webServices.xml/>

</context>

</spring>

<!– End - Necesario para Spring.NET –>

</configuration>

Le asignamos el archivo de configuración, al contexto que estamos usando.

Levantan, y si tipean el nombre alias que apuntamos la implementación del WS, va a andar todo correctamente:

Bueno, eso fue algo rápido, y que no tenía pensando publicarlo hoy, pero alguien me pidió un ejemplo.

Saludos.

PD: No se olviden de meter todas las dependencias de spring.net, sino no va a andar nada! Obvie esos pasos, porque son lógicos.

Powered by WordPress