Condividi tramite


Procedura: creare un feed RSS di base

Windows Communication Foundation (WCF) consente di creare un servizio che espone un feed di diffusione. In questo argomento viene illustrato come creare un servizio di diffusione che espone un feed di diffusione RSS.

Per creare un servizio di diffusione di base

  1. Definire un contratto di servizio utilizzando un'interfaccia contrassegnata con l'attributo WebGetAttribute. Ogni operazione esposta come feed di diffusione deve restituire un oggetto Rss20FeedFormatter.

    <ServiceContract()> _
    Public Interface IBlog
        <OperationContract()> _
    <WebGet> _
    Function GetBlog() As Rss20FeedFormatter
    End Interface
    
    [ServiceContract]
    public interface IBlog
    {
        [OperationContract]
        [WebGet]
        Rss20FeedFormatter GetBlog();
    }
    
    Bb412174.note(it-it,VS.100).gifNota:
    Tutte le operazioni del servizio che applicano l'attributo WebGetAttribute vengono mappate alle richieste HTTP GET. Per eseguire il mapping dell'operazione a un metodo HTTP diverso, utilizzare invece WebInvokeAttribute. Per ulteriori informazioni, vedere Procedura: creare un servizio HTTP Web WCF.

  2. Implementare il contratto di servizio.

    Public Class BlogService
        Implements IBlog
    
        Public Function GetBlog() As Rss20FeedFormatter Implements IBlog.GetBlog
            Dim feed As SyndicationFeed = New SyndicationFeed("My Blog Feed", "This is a test feed", New Uri("http://SomeURI"))
            feed.Authors.Add(New SyndicationPerson("someone@microsoft.com"))
            feed.Categories.Add(New SyndicationCategory("How To Sample Code"))
            feed.Description = New TextSyndicationContent("This is a how to sample that demonstrates how to expose a feed using RSS with WCF")
    
            Dim item1 As SyndicationItem = New SyndicationItem( _
                "Item One", _
                "This is the content for item one", _
                New Uri("https://localhost/Content/One"), _
                "ItemOneID", _
                DateTime.Now)
    
            Dim item2 As SyndicationItem = New SyndicationItem( _
                "Item Two", _
                "This is the content for item two", _
                New Uri("https://localhost/Content/Two"), _
                "ItemTwoID", _
                DateTime.Now)
    
            Dim item3 As SyndicationItem = New SyndicationItem( _
                "Item Three", _
                "This is the content for item three", _
                New Uri("https://localhost/Content/three"), _
                "ItemThreeID", _
                DateTime.Now)
    
            Dim items As New List(Of SyndicationItem)()
    
            items.Add(item1)
            items.Add(item2)
            items.Add(item3)
    
            feed.Items = items
    
            Return New Rss20FeedFormatter(feed)
        End Function
    End Class
    
    public class BlogService : IBlog
    {
        public Rss20FeedFormatter GetBlog()
        {
            SyndicationFeed feed = new SyndicationFeed("My Blog Feed", "This is a test feed", new Uri("http://SomeURI"));
            feed.Authors.Add(new SyndicationPerson("someone@microsoft.com"));
            feed.Categories.Add(new SyndicationCategory("How To Sample Code"));
            feed.Description = new TextSyndicationContent("This is a how to sample that demonstrates how to expose a feed using RSS with WCF");
    
            SyndicationItem item1 = new SyndicationItem(
                "Item One",
                "This is the content for item one",
                new Uri("https://localhost/Content/One"),
                "ItemOneID",
                DateTime.Now);
    
            SyndicationItem item2 = new SyndicationItem(
                "Item Two",
                "This is the content for item two",
                new Uri("https://localhost/Content/Two"),
                "ItemTwoID",
                DateTime.Now);
    
            SyndicationItem item3 = new SyndicationItem(
                "Item Three",
                "This is the content for item three",
                new Uri("https://localhost/Content/three"),
                "ItemThreeID",
                DateTime.Now);
    
            List<SyndicationItem> items = new List<SyndicationItem>();
    
            items.Add(item1);
            items.Add(item2);
            items.Add(item3);
    
            feed.Items = items;
    
            return new Rss20FeedFormatter(feed);
        }
    }
    
  3. Creare un oggetto SyndicationFeed e aggiungere un autore, una categoria e una descrizione.

    Dim feed As SyndicationFeed = New SyndicationFeed("My Blog Feed", "This is a test feed", New Uri("http://SomeURI"))
    feed.Authors.Add(New SyndicationPerson("someone@microsoft.com"))
    feed.Categories.Add(New SyndicationCategory("How To Sample Code"))
    feed.Description = New TextSyndicationContent("This is a how to sample that demonstrates how to expose a feed using RSS with WCF")
    
    SyndicationFeed feed = new SyndicationFeed("My Blog Feed", "This is a test feed", new Uri("http://SomeURI"));
    feed.Authors.Add(new SyndicationPerson("someone@microsoft.com"));
    feed.Categories.Add(new SyndicationCategory("How To Sample Code"));
    feed.Description = new TextSyndicationContent("This is a how to sample that demonstrates how to expose a feed using RSS with WCF");
    
  4. Creare diversi oggetti SyndicationItem.

    Dim item1 As SyndicationItem = New SyndicationItem( _
        "Item One", _
        "This is the content for item one", _
        New Uri("https://localhost/Content/One"), _
        "ItemOneID", _
        DateTime.Now)
    
    Dim item2 As SyndicationItem = New SyndicationItem( _
        "Item Two", _
        "This is the content for item two", _
        New Uri("https://localhost/Content/Two"), _
        "ItemTwoID", _
        DateTime.Now)
    
    Dim item3 As SyndicationItem = New SyndicationItem( _
        "Item Three", _
        "This is the content for item three", _
        New Uri("https://localhost/Content/three"), _
        "ItemThreeID", _
        DateTime.Now)
    
    SyndicationItem item1 = new SyndicationItem(
        "Item One",
        "This is the content for item one",
        new Uri("https://localhost/Content/One"),
        "ItemOneID",
        DateTime.Now);
    
    SyndicationItem item2 = new SyndicationItem(
        "Item Two",
        "This is the content for item two",
        new Uri("https://localhost/Content/Two"),
        "ItemTwoID",
        DateTime.Now);
    
    SyndicationItem item3 = new SyndicationItem(
        "Item Three",
        "This is the content for item three",
        new Uri("https://localhost/Content/three"),
        "ItemThreeID",
        DateTime.Now);
    
  5. Aggiungere SyndicationItem al feed.

    Dim items As New List(Of SyndicationItem)()
    
    items.Add(item1)
    items.Add(item2)
    items.Add(item3)
    
    feed.Items = items
    
    List<SyndicationItem> items = new List<SyndicationItem>();
    
    items.Add(item1);
    items.Add(item2);
    items.Add(item3);
    
    feed.Items = items;
    
  6. Restituire il feed.

    Return New Rss20FeedFormatter(feed)
    
    return new Rss20FeedFormatter(feed);
    

Per ospitare un servizio

  1. Creare un oggetto WebServiceHost.

    Dim baseAddress As New Uri("https://localhost:8000/BlogService")
    Dim svcHost As New WebServiceHost(GetType(BlogService), baseAddress)
    
    Uri baseAddress = new Uri("https://localhost:8000/BlogService");
    WebServiceHost svcHost = new WebServiceHost(typeof(BlogService), baseAddress);
    
  2. Aprire l'host del servizio e attendere finché l'utente non preme INVIO.

    svcHost.Open()
    Console.WriteLine("Service is running")
    
    Dim reader As XmlReader = XmlReader.Create("https://localhost:8000/BlogService/GetBlog")
    Dim feed As SyndicationFeed = SyndicationFeed.Load(reader)
    Console.WriteLine(feed.Title.Text)
    Console.WriteLine("Items:")
    For Each item As SyndicationItem In feed.Items
        Console.WriteLine("Title: {0}", item.Title.Text)
        Console.WriteLine("Summary: {0}", item.Summary.Text)
    Next
    Console.WriteLine("Press <enter> to quit...")
    Console.ReadLine()
    svcHost.Close()
    
    svcHost.Open();
    Console.WriteLine("Service is running");
    
    XmlReader reader = XmlReader.Create("https://localhost:8000/BlogService/GetBlog");
    SyndicationFeed feed = SyndicationFeed.Load(reader);
    Console.WriteLine(feed.Title.Text);
    Console.WriteLine("Items:");
    foreach (SyndicationItem item in feed.Items)
    {
        Console.WriteLine("Title: {0}", item.Title.Text);
        Console.WriteLine("Summary: {0}", ((TextSyndicationContent)item.Summary).Text);
    }
    Console.WriteLine("Press <enter> to quit...");
    Console.ReadLine();
    svcHost.Close();
    

Per chiamare GetBlog() con un HTTP GET

  1. Aprire Internet Explorer, digitare l'URL seguente e premere INVIO: https://localhost:8000/BlogService/GetBlog. L'URL contiene l'indirizzo di base del servizio (https://localhost:8000/BlogService), l'indirizzo relativo dell'endpoint e l'operazione del servizio da chiamare.

Per chiamare GetBlog() dal codice

  1. Creare un XmlReader con l'indirizzo di base e il metodo che si sta chiamando.

    Dim serviceAddress As New Uri("https://localhost:8000/BlogService/GetBlog")
    
    Uri serviceAddress = new Uri("https://localhost:8000/BlogService/GetBlog");
    
  2. Chiamare il metodo statico Load passando l'oggetto XmlReader appena creato.

    Dim reader As XmlReader = XmlReader.Create("https://localhost:8000/BlogService/GetBlog")
    Dim feed As SyndicationFeed = SyndicationFeed.Load(reader)
    
    XmlReader reader = XmlReader.Create("https://localhost:8000/BlogService/GetBlog");
    SyndicationFeed feed = SyndicationFeed.Load(reader);
    
    

    Verrà in tal modo richiamata l'operazione del servizio e verrà popolato un nuovo SyndicationFeed con il formattatore restituito dall'operazione del servizio.

  3. Accedere all'oggetto feed.

    Console.WriteLine(feed.Title.Text)
    Console.WriteLine("Items:")
    For Each item As SyndicationItem In feed.Items
        Console.WriteLine("Title:  {0}", item.Title.Text)
        Console.WriteLine("Summary:  {0}", item.Summary.Text)
    Next
    
    Console.WriteLine(feed.Title.Text);
    Console.WriteLine("Items:");
    foreach (SyndicationItem item in feed.Items)
    {
        Console.WriteLine("Title: {0}", item.Title.Text);
        Console.WriteLine("Summary: {0}", ((TextSyndicationContent)item.Summary).Text);
    }
    

Esempio

Di seguito è riportato il codice completo per questo esempio.

Imports System
Imports System.Xml
Imports System.ServiceModel
Imports System.ServiceModel.Description
Imports System.ServiceModel.Syndication
Imports System.ServiceModel.Web
Imports System.Collections.ObjectModel
Imports System.Collections.Generic

<ServiceContract()> _
Public Interface IBlog
    <OperationContract()> _
<WebGet> _
Function GetBlog() As Rss20FeedFormatter
End Interface

Public Class BlogService
    Implements IBlog

    Public Function GetBlog() As Rss20FeedFormatter Implements IBlog.GetBlog
        Dim feed As SyndicationFeed = New SyndicationFeed("My Blog Feed", "This is a test feed", New Uri("http://SomeURI"))
        feed.Authors.Add(New SyndicationPerson("someone@microsoft.com"))
        feed.Categories.Add(New SyndicationCategory("How To Sample Code"))
        feed.Description = New TextSyndicationContent("This is a how to sample that demonstrates how to expose a feed using RSS with WCF")

        Dim item1 As SyndicationItem = New SyndicationItem( _
            "Item One", _
            "This is the content for item one", _
            New Uri("https://localhost/Content/One"), _
            "ItemOneID", _
            DateTime.Now)

        Dim item2 As SyndicationItem = New SyndicationItem( _
            "Item Two", _
            "This is the content for item two", _
            New Uri("https://localhost/Content/Two"), _
            "ItemTwoID", _
            DateTime.Now)

        Dim item3 As SyndicationItem = New SyndicationItem( _
            "Item Three", _
            "This is the content for item three", _
            New Uri("https://localhost/Content/three"), _
            "ItemThreeID", _
            DateTime.Now)

        Dim items As New List(Of SyndicationItem)()

        items.Add(item1)
        items.Add(item2)
        items.Add(item3)

        feed.Items = items

        Return New Rss20FeedFormatter(feed)
    End Function
End Class


Module Program

    Sub Main()
        Dim baseAddress As New Uri("https://localhost:8000/BlogService")
        Dim svcHost As New WebServiceHost(GetType(BlogService), baseAddress)

        Try
            svcHost.Open()
            Console.WriteLine("Service is running")

            Dim reader As XmlReader = XmlReader.Create("https://localhost:8000/BlogService/GetBlog")
            Dim feed As SyndicationFeed = SyndicationFeed.Load(reader)
            Console.WriteLine(feed.Title.Text)
            Console.WriteLine("Items:")
            For Each item As SyndicationItem In feed.Items
                Console.WriteLine("Title: {0}", item.Title.Text)
                Console.WriteLine("Summary: {0}", item.Summary.Text)
            Next
            Console.WriteLine("Press <enter> to quit...")
            Console.ReadLine()
            svcHost.Close()
        Catch ce As CommunicationException
            Console.WriteLine("An exception occurred: {0}", ce.Message)
            svcHost.Abort()
        End Try
    End Sub
End Module
using System;
using System.Xml;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Syndication;
using System.ServiceModel.Web;
using System.Collections.ObjectModel;
using System.Collections.Generic;

namespace Service
{
    [ServiceContract]
    public interface IBlog
    {
        [OperationContract]
        [WebGet]
        Rss20FeedFormatter GetBlog();
    }

    public class BlogService : IBlog
    {
        public Rss20FeedFormatter GetBlog()
        {
            SyndicationFeed feed = new SyndicationFeed("My Blog Feed", "This is a test feed", new Uri("http://SomeURI"));
            feed.Authors.Add(new SyndicationPerson("someone@microsoft.com"));
            feed.Categories.Add(new SyndicationCategory("How To Sample Code"));
            feed.Description = new TextSyndicationContent("This is a how to sample that demonstrates how to expose a feed using RSS with WCF");

            SyndicationItem item1 = new SyndicationItem(
                "Item One",
                "This is the content for item one",
                new Uri("https://localhost/Content/One"),
                "ItemOneID",
                DateTime.Now);

            SyndicationItem item2 = new SyndicationItem(
                "Item Two",
                "This is the content for item two",
                new Uri("https://localhost/Content/Two"),
                "ItemTwoID",
                DateTime.Now);

            SyndicationItem item3 = new SyndicationItem(
                "Item Three",
                "This is the content for item three",
                new Uri("https://localhost/Content/three"),
                "ItemThreeID",
                DateTime.Now);

            List<SyndicationItem> items = new List<SyndicationItem>();

            items.Add(item1);
            items.Add(item2);
            items.Add(item3);

            feed.Items = items;

            return new Rss20FeedFormatter(feed);
        }
    }

    public class Host
    {
        static void Main(string[] args)
        {
            Uri baseAddress = new Uri("https://localhost:8000/BlogService");
            WebServiceHost svcHost = new WebServiceHost(typeof(BlogService), baseAddress);

            try
            {
                svcHost.Open();
                Console.WriteLine("Service is running");

                XmlReader reader = XmlReader.Create("https://localhost:8000/BlogService/GetBlog");
                SyndicationFeed feed = SyndicationFeed.Load(reader);
                Console.WriteLine(feed.Title.Text);
                Console.WriteLine("Items:");
                foreach (SyndicationItem item in feed.Items)
                {
                    Console.WriteLine("Title: {0}", item.Title.Text);
                    Console.WriteLine("Summary: {0}", ((TextSyndicationContent)item.Summary).Text);
                }
                Console.WriteLine("Press <enter> to quit...");
                Console.ReadLine();
                svcHost.Close();
            }
            catch (CommunicationException ce)
            {
                Console.WriteLine("An exception occurred: {0}", ce.Message);
                svcHost.Abort();
            }
        }
    }
}

Compilazione del codice

Durante la compilazione del codice precedente, fare riferimento a System.ServiceModel.dll e a System.ServiceModel.Web.dll.

Vedere anche

Riferimento

WebHttpBinding
WebGetAttribute