Welcome to Kartones.Net Sign in

Sector 7G

Sector7G Live Search

About Me

About Me

Windows Live Messenger Presence Gadget

My Photo Albums

My Photo Web Albums

Logos

  • Sector7G
  • ilitia Technologies

October 2008 - Posts

Utilizando Web Services Desde Buddyscript

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:

  • public Portfolio GetPortfolioById(string id)
  • public List<Portfolio> GetAllPortfolios()

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.

Posted: Oct 07 2008, 02:37 PM by Pedroafa | with no comments