Vorgehensweise: Erstellen eines grundlegenden RS-FeedsHow to: Create a Basic RSS Feed

Windows Communication Foundation (WCF) ermöglicht Ihnen die Erstellung ein Diensts, das einen Syndication-feed verfügbar macht.Windows Communication Foundation (WCF) allows you to create a service that exposes a syndication feed. In diesem Thema wird erläutert, wie ein Syndication-Dienst, der einen RSS Syndication-Feed verfügbar macht, erstellt wird.This topic discusses how to create a syndication service that exposes an RSS syndication feed.

So erstellen Sie einen grundlegenden Syndication-DienstTo create a basic syndication service

  1. Definieren Sie einen Dienstvertrag mit einer Schnittstelle, die mit dem WebGetAttribute-Attribut gekennzeichnet ist.Define a service contract using an interface marked with the WebGetAttribute attribute. Jeder Vorgang, der als Syndication-Feed verfügbar gemacht wird, sollte ein Rss20FeedFormatter-Objekt zurückgeben.Each operation that is exposed as a syndication feed should return a Rss20FeedFormatter object.

    [ServiceContract]
    public interface IBlog
    {
        [OperationContract]
        [WebGet]
        Rss20FeedFormatter GetBlog();
    }
    
    <ServiceContract()> _
    Public Interface IBlog
        <OperationContract()> _
    <WebGet> _
    Function GetBlog() As Rss20FeedFormatter
    End Interface
    

    Hinweis

    Alle Dienstvorgänge, die das WebGetAttribute-Attribut übernehmen, werden HTTP GET-Anforderungen zugeordnet.All service operations that apply the WebGetAttribute attribute are mapped to HTTP GET requests. Wenn Sie den Vorgang einer anderen HTTP-Methode zuordnen möchten, verwenden Sie stattdessen WebInvokeAttribute.To map your operation to a different HTTP method, use the WebInvokeAttribute instead. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer grundlegenden WCF-Web-HTTP-Diensts.For more information, see How to: Create a Basic WCF Web HTTP Service.

  2. Implementieren Sie den Dienstvertrag.Implement the service contract.

    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("http://localhost/Content/One"),
                "ItemOneID",
                DateTime.Now);
    
            SyndicationItem item2 = new SyndicationItem(
                "Item Two",
                "This is the content for item two",
                new Uri("http://localhost/Content/Two"),
                "ItemTwoID",
                DateTime.Now);
    
            SyndicationItem item3 = new SyndicationItem(
                "Item Three",
                "This is the content for item three",
                new Uri("http://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 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("http://localhost/Content/One"), _
                "ItemOneID", _
                DateTime.Now)
    
            Dim item2 As SyndicationItem = New SyndicationItem( _
                "Item Two", _
                "This is the content for item two", _
                New Uri("http://localhost/Content/Two"), _
                "ItemTwoID", _
                DateTime.Now)
    
            Dim item3 As SyndicationItem = New SyndicationItem( _
                "Item Three", _
                "This is the content for item three", _
                New Uri("http://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
    
  3. Erstellen Sie ein SyndicationFeed-Objekt, und fügen Sie einen Autor, eine Kategorie und eine Beschreibung hinzu.Create a SyndicationFeed object and add an author, category, and description.

    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");
    
    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")
    
  4. Erstellen Sie mehrere SyndicationItem-Objekte.Create several SyndicationItem objects.

    SyndicationItem item1 = new SyndicationItem(
        "Item One",
        "This is the content for item one",
        new Uri("http://localhost/Content/One"),
        "ItemOneID",
        DateTime.Now);
    
    SyndicationItem item2 = new SyndicationItem(
        "Item Two",
        "This is the content for item two",
        new Uri("http://localhost/Content/Two"),
        "ItemTwoID",
        DateTime.Now);
    
    SyndicationItem item3 = new SyndicationItem(
        "Item Three",
        "This is the content for item three",
        new Uri("http://localhost/Content/three"),
        "ItemThreeID",
        DateTime.Now);
    
    Dim item1 As SyndicationItem = New SyndicationItem( _
        "Item One", _
        "This is the content for item one", _
        New Uri("http://localhost/Content/One"), _
        "ItemOneID", _
        DateTime.Now)
    
    Dim item2 As SyndicationItem = New SyndicationItem( _
        "Item Two", _
        "This is the content for item two", _
        New Uri("http://localhost/Content/Two"), _
        "ItemTwoID", _
        DateTime.Now)
    
    Dim item3 As SyndicationItem = New SyndicationItem( _
        "Item Three", _
        "This is the content for item three", _
        New Uri("http://localhost/Content/three"), _
        "ItemThreeID", _
        DateTime.Now)
    
  5. Fügen Sie dem Feed das SyndicationItem hinzuAdd the SyndicationItem to the feed.

    List<SyndicationItem> items = new List<SyndicationItem>();
    
    items.Add(item1);
    items.Add(item2);
    items.Add(item3);
    
    feed.Items = items;
    
    Dim items As New List(Of SyndicationItem)()
    
    items.Add(item1)
    items.Add(item2)
    items.Add(item3)
    
    feed.Items = items
    
  6. Geben Sie den Feed zurück.Return the feed.

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

So hosten Sie einen DienstTo host a service

  1. Erstellen eines WebServiceHost-ObjektsCreate a WebServiceHost object.

    Uri baseAddress = new Uri("http://localhost:8000/BlogService");
    WebServiceHost svcHost = new WebServiceHost(typeof(BlogService), baseAddress);
    
    Dim baseAddress As New Uri("http://localhost:8000/BlogService")
    Dim svcHost As New WebServiceHost(GetType(BlogService), baseAddress)
    
  2. Öffnen Sie den Diensthost, und warten Sie, bis der Benutzer die EINGABETASTE drückt.Open the service host and wait until the user presses ENTER.

    svcHost.Open();
    Console.WriteLine("Service is running");
    
    XmlReader reader = XmlReader.Create("http://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();
    
    svcHost.Open()
    Console.WriteLine("Service is running")
    
    Dim reader As XmlReader = XmlReader.Create("http://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()
    

So rufen Sie GetBlog() mit HTTP GET aufTo call GetBlog() with an HTTP GET

  1. Öffnen Sie Internet Explorer, geben Sie die folgende URL, und drücken Sie die EINGABETASTE: http://localhost:8000/BlogService/GetBlog.Open Internet Explorer, type the following URL, and press ENTER: http://localhost:8000/BlogService/GetBlog. Die URL enthält die Basisadresse des Diensts (http://localhost:8000/BlogService), die relative Adresse des Endpunkts und den aufzurufenden Dienstvorgang.The URL contains the base address of the service (http://localhost:8000/BlogService), the relative address of the endpoint, and the service operation to call.

So rufen Sie GetBlog() aus dem Code aufTo call GetBlog() from code

  1. Erstellen Sie einen XmlReader mit der Basisadresse und der Methode, die Sie aufrufen.Create an XmlReader with the base address and the method you are calling.

    Uri serviceAddress = new Uri("http://localhost:8000/BlogService/GetBlog");
    
    Dim serviceAddress As New Uri("http://localhost:8000/BlogService/GetBlog")
    
  2. Rufen Sie die statische Load(XmlReader)-Methode auf, und übergeben Sie dabei den gerade erstellten XmlReader.Call the static Load(XmlReader) method, passing in the XmlReader you just created.

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

    Dies ruft einen Dienstvorgang auf und füllt einen neuen SyndicationFeed mit dem vom Dienstvorgang zurückgegebenen Formatierungsprogramm auf.This invokes the service operation and populates a new SyndicationFeed with the formatter returned from the service operation.

  3. Greifen Sie auf das Feedobjekt zu.Access the feed object.

    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(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
    

BeispielExample

Unten ist die vollständige Codeauflistung für dieses Beispiel angegeben.The following is the full code listing for this example.

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("http://localhost/Content/One"),
                "ItemOneID",
                DateTime.Now);

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

            SyndicationItem item3 = new SyndicationItem(
                "Item Three",
                "This is the content for item three",
                new Uri("http://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("http://localhost:8000/BlogService");
            WebServiceHost svcHost = new WebServiceHost(typeof(BlogService), baseAddress);

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

                XmlReader reader = XmlReader.Create("http://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();
            }
        }
    }
}
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("http://localhost/Content/One"), _
            "ItemOneID", _
            DateTime.Now)

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

        Dim item3 As SyndicationItem = New SyndicationItem( _
            "Item Three", _
            "This is the content for item three", _
            New Uri("http://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("http://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("http://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

Kompilieren des CodesCompiling the Code

Verweisen Sie beim Kompilieren des obigen Codes auf System.ServiceModel.dll und System.ServiceModel.Web.dll.When compiling the preceding code, reference System.ServiceModel.dll and System.ServiceModel.Web.dll.

Siehe auchSee Also

WebHttpBinding
WebGetAttribute