Создание каналов синдикации ASP.NET с помощью SqlConnection и VB.NET - PullRequest
2 голосов
/ 19 мая 2009

Это, кажется, отличная статья Скотта Митчелла для создания синдицированных каналов в ASP.NET 3.5 . Проблема для меня заключается в том, что он использует C # и Linq, о которых я не очень хорошо понимаю в настоящее время.

http://dotnetslackers.com/articles/aspnet/How-to-create-a-syndication-feed-for-your-website.aspx

Кто-нибудь знает, где может существовать пример для пространства имен System.ServiceModel.Syndication, которое может создать синдицированный канал, подобный этой статье, используя VB.NET и объект SQLConnection ?

Я огляделся по сторонам, и каждый пример, кажется, создан на C # и Linq (что, вероятно, свидетельствует о моей необходимости изучить их скорее, чем позже).

Ответы [ 2 ]

7 голосов
/ 28 января 2010

Вы, наверное, уже поняли это, но вот реализация для полноты и некоторой любви к VB (и попытка для значка Necromancer .:)

Страница aspx проста, обратите внимание на 60-секундный кеш:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="YourProject._Default" %>
<%@ OutputCache Duration="60" VaryByParam="Type" %>

Возможно, вы захотите использовать вместо этого HttpHandler, но это тоже будет прекрасно работать.

Код позади:

Imports System.ServiceModel.Syndication
Imports System.Xml

Partial Public Class _Default
  Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim dbConn As String = "[your db connection]"
    Dim format As FeedFormats = GetFeedFormat()
    Dim posts As New List(Of SyndicationItem)

    Using cnn As New SqlClient.SqlConnection(dbConn)
      cnn.Open()

      Using cmd As New SqlClient.SqlCommand("SELECT ID, Title, Text, Url, Created FROM Posts", cnn)
        Dim reader As SqlClient.SqlDataReader = cmd.ExecuteReader

        While reader.Read
          Dim item As New SyndicationItem(reader.Item("Title"), reader("Text"), New Uri(reader("Url")))

          posts.Add(item)
        End While
      End Using
    End Using

    Dim feed As New SyndicationFeed("Your feed title", "Your feed description", New Uri("http://yourdomain.com"), posts)

    Using feedWriter As XmlWriter = XmlWriter.Create(Response.OutputStream)
      Select Case format
        Case FeedFormats.Atom
          Response.ContentType = "application/rss+xml"

          Dim atomFormatter As New Atom10FeedFormatter(feed)
          atomFormatter.WriteTo(feedWriter)
        Case FeedFormats.Rss
          Response.ContentType = "application/atom+xml"

          Dim rssFormatter As New Rss20FeedFormatter(feed)
          rssFormatter.WriteTo(feedWriter)
      End Select
    End Using
  End Sub

  Private Function GetFeedFormat() As FeedFormats
    If Request.QueryString("format") = "atom" Then
      Return FeedFormats.Atom
    Else
      Return FeedFormats.Rss
    End If
  End Function

  Public Enum FeedFormats
    Rss = 1
    Atom = 2
  End Enum
End Class

Наконец, для супер-полноты, SQL-скрипт для создания таблицы:

CREATE TABLE [dbo].[Posts](
 [ID] [int] IDENTITY(1,1) NOT NULL,
 [Title] [nvarchar](50) NOT NULL,
 [Text] [ntext] NOT NULL,
 [Url] [nvarchar](50) NOT NULL,
 [Created] [datetime2](7) NOT NULL,
 CONSTRAINT [PK_Posts] PRIMARY KEY CLUSTERED 
(
 [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[Posts] ADD  CONSTRAINT [DF_Posts_Url]  DEFAULT ('') FOR [Url]
GO

ALTER TABLE [dbo].[Posts] ADD  CONSTRAINT [DF_Posts_Created]  DEFAULT (getdate()) FOR [Created]
GO

Готово. VB.NET, SQL-соединение, пространство имен System.ServiceModel.Syndication и нет LINQ. :)

Обновление: получил значок Некроманта 11-11-2010. Ура! Спасибо! :)

0 голосов
/ 19 мая 2009

Я не знаю примера использования этих объектов в VB.Net, но есть несколько способов преобразовать код C # в VB.Net. Вы можете использовать IDE, например SharpDevelop, вы можете использовать любой из нескольких бесплатных онлайн-конвертеров.

Моя любимая техника - загрузить или вырезать и вставить исходный код в visual studio и скомпилировать проект на C #. Затем используйте Reflector , чтобы разобрать IL на VB.Net. Сделав это, вы можете сравнить C # с VB.Net, и это может помочь вам увидеть сходство и быстрее освоить C #, если вы этого хотите.

...