Creación y configuración  de un servicio WCF  para comunicación con TweetRobot
Para crear un servicio lo importante es entender su funcionamiento.
.

Lo primero es agregar tener un proyecto Web, que nos permita hospedar la aplicación Silverlight, visual Studi inicialmente y por default así lo hace. Por tanto nos resta agregar a este proyecto Web una carpeta de servicio para incluir el  WCF service, así:

Ahora veamos el código y la forma en que vamos a estructurar el servicio

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace ReadDotNet.Web.Service
{
    ///
<summary> /// Contrato de servicio para exponer las operaciones
 /// necesarias para hacer los tweet's automáticos
 /// </summary>
    [ServiceContract]
    public interface IServiceRss
    {
        ///
<summary> /// El método permite lear un conjunto de url's y leer los respectivos RSS's que
 /// se crean en la herramienta e interfaz creada.
 /// </summary>
///
        [OperationContract]
        void ReadRss(List tweetCollection, string hashtags, int minutes);
    }
}

Veamos la clase que me permite desde Silverlight enviar las o la url.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ReadDotNet.Web.Service
{
    ///
<summary> /// Clase encargada para manejar la información de los RSS que se van a
 /// convertir en Tweets!
 /// </summary>
    public class RssData
    {
        public string Url { get; set; }
        //Más...
    }
}

Ok miremos cómo la aplicación silverlight debe tener configurados los endpoints del servicio:

Config

Lo importante en las siguiente lineas de código es: openTimeout, closeTimeout y sendTimeout los cuales me permiten configurar los tiempos de espera para apertura, envio y cierre de la comunicación con el servicio WCF.


Bien hasta aquí se definió la interfaz y el tipo de datos que la aplicación Silverlight va a enviar al Servicio WCF como solicitud.

Ahora veamos la funcionalidad que se creó a partir de  implementar  la interface.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Xml;
using System.ServiceModel.Syndication;
using System.Xml.Resolvers;
using Twitterizer;

namespace ReadDotNet.Web.Service
{
    public class ServiceRss : IServiceRss
    {
        ///
<summary> /// Se leen los parametros y carga la información necesaria para hacer los
 /// Tweets a través de la clase TweetToRss.
 /// </summary>
        ///
        ///
        ///
        public void ReadRss(List tweetCollection, string hashtags, int minutes)
        {
            try
            {
                TweetToRss tweetToRss = new TweetToRss(tweetCollection);
                tweetToRss.Minutes = minutes;
                tweetToRss.HashTags = hashtags;
                tweetToRss.Tweeting();
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
}

Bien allí vemos que se crea un objeto de tipo TweetToRss, al cual se pasa la colección de datos RSS que queremos leer y poder hacer los tweets. Seteamos las propiedades Minutes, que hace referencia al rango de  tiempo que se establece entre cada tweet y tweet, por otra parte los hashtags referente a las citas de tipo  “#developer” por ejemplo, las cuales permiten amplificar noticias (Tweets) en Twitter.
Internamente la clase Tweets luce de la siguiente forma.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization;
using Twitterizer;
using System.Xml;
using System.ServiceModel.Syndication;
using System.Threading;

namespace ReadDotNet.Web.Service
{
// Clase encargada de procesar RSS's para Tweets automáticos.
    public class TweetToRss
    {
        private List Tweets;
     // Intervalo de tiempo entre cada Tweet
     public int Minutes { get; set; }

     // Lista de RSS's a procesar
     public List ListTweets { get; set; }

     // Notas tipo # para twitter
        public string HashTags { get; set; }

        public TweetToRss(List tweetCollection)
        {
            ListTweets = tweetCollection;
            Tweets = new List();
        }
    // Permite hacer los Tweets respecto a cada una de las RSS que se lean.
       internal bool Tweeting()
        {
            bool result = true;
            List listTweets = new List();
            ListTweets.ForEach(t =>
            {
                XmlReaderSettings readerSettings = new XmlReaderSettings();
                readerSettings.DtdProcessing = DtdProcessing.Parse;

                var reader = XmlReader.Create(t.Url, readerSettings);
                SyndicationFeed rssFeed = SyndicationFeed.Load(reader);

                foreach (SyndicationItem item in rssFeed.Items)
                {
                    var shortTweetLink = GoogleUrlShortner.Shorten(item.Links.First().GetAbsoluteUri().AbsoluteUri).id;
                    if (!Tweet.DoTweet(item.Title.Text, shortTweetLink, HashTags))
                    {
                        result = false;
                        break;
                    }
                    Thread.Sleep(new TimeSpan(0, Minutes, 0));
                }
            });
            return result;
        }

    }
}
Anuncios

Páginas: 1 2 3 4 5