Uno de los puntos importantes de un agente es que la información que maneja sea dinámica y se vaya actualizando con el tiempo. Para conseguir esto, el mejor medio es utilizar Web Services.
Conectar un agente a un Web Service se puede realizar de varias formas. La manera elegida será dependiendo de las necesidades o las caracteriscas del servicio. En estos dos artículos se explican muy bien todo lo necesario:
Una pregunta que he encontrado a lo largo de los foros de MSDN dedicados a Windows Live Agents es: ¿Los Web Services pueden devolver objetos?. La respuesta es SÍ, y ahora veremos cómo.
Para este artículo, como ejemplo he preparado el Web Services StockExchange. Que cuenta con los siguientes métodos:
Nota: Como se puede ver, en el primer método como parámetro de entrada se utiliza un tipo string. Esto evita que sea necesario construir el mensaje SOAP para hacer la llamada al servicio desde Buddyscript.
La entidad Portfolio utilizada por el Web Service es la siguiente:
public class Portfolio
{
public string Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
Para poder conectar el Web Services desde Buddyscript conocer el mensaje SOAP de respuesta del servicio es muy importante porque aporta una gran ayuda. Ya que en el código Buddyscript hay que definir la estructura de este mismo.
| SOAP Método GetPortfolioById |
SOAP Método GetAllPortfolios |
<soap12:Envelope>
<soap12:Body>
<GetPortfolioByIdResponse>
<GetPortfolioByIdResult>
<Id>string</Id>
<Name>string</Name>
<Description>
string
</Description>
</GetPortfolioByIdResult>
</GetPortfolioByIdResponse>
</soap12:Body>
</soap12:Envelope> |
<soap12:Envelope>
<soap12:Body>
<GetAllPortfoliosResponse>
<GetAllPortfoliosResult>
<Portfolio>
<Id>string</Id>
<Name>string</Name>
<Description>
string
</Description>
</Portfolio>
<Portfolio>
<Id>string</Id>
<Name>string</Name>
<Description>
string
</Description>
</Portfolio>
</GetAllPortfoliosResult>
</GetAllPortfoliosResponse>
</soap12:Body>
</soap12:Envelope> |
De esta manera, conociendo como es la estructura del mensaje SOAP, podemos adecuar el código a la respuesta del servicio. Realmente es como si se leyera una fuente XML, sólo que esta vez el XML procede de un Web Service. El código que llama a los dos métodos es el siguiente:
datasource GetPortfolioById(ID) => Id, Name, Description
soap
proxy http://localhost:52057/StockExchange.asmx
name GetPortfolioById
namespace http://tempuri.org/
action http://tempuri.org/GetPortfolioById
input
string id = ID
simple xml
GetPortfolioByIdResult
Id
Name
Description
datasource GetAllPortfolios() => Id, Name, Description
soap
proxy http://localhost:52057/StockExchange.asmx
name GetAllPortfolios
namespace http://tempuri.org/
action http://tempuri.org/GetAllPortfolios
simple xml
GetAllPortfoliosResult
Portfolio {loop=content}
Id
Name
Description
Cómo parámetro también se podría utilizar un objeto, para ello será necesario crear el mensaje SOAP de llamada como se muestra en el artículo Integrating Buddyscript and Web Services Part II.