For completeness, this chapter includes a Visual Basic version of the QuoteService. It's in a separate project named QuoteServiceVB. The file name is QuoteServiceVB.asmx. Listing 19-2 shows the Visual Basic code for the service. Listing 19-3 shows the Visual Basic code for the QuotesCollection.VB utility class.
Imports
System
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports System.IO
<Serializable()> _
Public Class QuotesCollection : Inherits DataTable
Public Sub QuotesCollection()
End Sub
Public Sub Synthesize()
Me.TableName = "Quotations"
Dim dr As DataRow
Columns.Add(New _
DataColumn("Quote", GetType(String)))
Columns.Add(New _
DataColumn("OriginatorLastName", GetType(String)))
Columns.Add(New _
DataColumn("OriginatorFirstName", GetType(String)))
dr = Me.NewRow()
dr(0) = _
"Imagination is more important than knowledge."
dr(1) = "Einstein"
dr(2) = "Albert"
Rows.Add(dr)
dr = Me.NewRow()
dr(0) = _
"Assume a virtue, if you have it not"
dr(1) = "Shakespeare"
dr(2) = "William"
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = _
"A banker is a fellow who lends you his " + _
"umbrella when the sun is shining, but wants " + _
"it back the minute it begins to rain."
dr(1) = "Twain"
dr(2) = "Mark"
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = "A man cannot be comfortable without " + _
"his own approval."
dr(1) = "Twain"
dr(2) = "Mark"
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = "Beware the young doctor and the " + _
"old barber"
dr(1) = "Franklin"
dr(2) = "Benjamin"
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = "Reality is merely an illusion, " + _
"albeit a very persistent one."
dr(1) = "Einstein"
dr(2) = "Albert"
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = "Beer has food value, but food has " + _
"no beer value"
dr(1) = "Sticker"
dr(2) = "Bumper"
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = "Research is what I'm doing when I " + _
"don() 't know what I'm doing"
dr(1) = "Von Braun"
dr(2) = "Wernher""
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = "Whatever is begun in anger ends in shame"
dr(1) = "Franklin"
dr(2) = "Benjamim"
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = "We think in generalities, but " + _
"we live in details"
dr(1) = "Whitehead"
dr(2) = "Alfred North"
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = "Every really new idea looks crazy " + _
"at first."
dr(1) = "Whitehead"
dr(2) = "Alfred North"
Me.Rows.Add(dr)
dr = Me.NewRow()
dr(0) = "The illiterate of the 21st century will " + _
"not be those who cannot read and write, but those " + _
"who cannot learn, unlearn, and relearn."
dr(1) = "Whitehead"
dr(2) = "Alfred North"
Me.Rows.Add(dr)
End Sub
End ClassImports
System
Imports System.Web
Imports System.Data
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Web.Caching
Public Structure Quote
Public _strQuote As String
Public _strOriginatorLastName As String
Public _strOriginatorFirstName As String
Public Sub New(ByVal strQuote As String, _
ByVal strOriginatorLastName As String, _
ByVal strOriginatorFirstName As String)
_strQuote = strQuote
_strOriginatorLastName = strOriginatorLastName
_strOriginatorFirstName = strOriginatorFirstName
End Sub
End Structure
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
Public Class QuoteServiceVB
Inherits System.Web.Services.WebService
Function LoadQuotes() As QuotesCollection
Dim quotesCollection As QuotesCollection
Dim ctx As HttpContext
ctx = HttpContext.Current
Dim o As Object
o = ctx.Cache("quotesCollection")
quotesCollection = CType(o, QuotesCollection)
If quotesCollection Is Nothing Then
quotesCollection = New QuotesCollection()
Dim strAppPath As String
strAppPath = Server.MapPath("")
Dim strFilePathXml As String
strFilePathXml = _
strAppPath ' _
"\\app_data\\QuotesCollection.xml"
Dim strFilePathSchema As String
strFilePathSchema = _
strAppPath ' _
"\\app_data\\QuotesCollection.xsd"
quotesCollection.ReadXmlSchema(strFilePathSchema)
quotesCollection.ReadXml(strFilePathXml)
Dim cacheDependency As CacheDependency
cacheDependency = New CacheDependency(strFilePathXml)
ctx.Cache.Insert("quotesCollection", _
quotesCollection, _
cacheDependency, _
Cache.NoAbsoluteExpiration, _
Cache.NoSlidingExpiration, _
CacheItemPriority.Default, _
Nothing)
End If
Return quotesCollection
End Function
Public Sub QuoteService()
End Sub
<WebMethod()> _
Public Function HelloWorld() As String
Return "Hello World"
End Function
<WebMethod()> _
Public Function GetAQuote() As Quote
Dim quotesCollection As QuotesCollection
quotesCollection = Me.LoadQuotes()
Dim nNumQuotes As Integer
nNumQuotes = quotesCollection.Rows.Count
Dim random As Random
random = New Random()
Dim nQuote As Integer
nQuote = random.Next(nNumQuotes)
Dim dataRow As DataRow
dataRow = quotesCollection.Rows(nQuote)
Dim quote As Quote
quote = New Quote(CType(dataRow("Quote"), String), _
CType(dataRow("OriginatorLastName"), String), _
CType(dataRow("OriginatorFirstName"), String))
Return quote
End Function
<WebMethod()> _
Public Sub AddQuote(ByVal quote As Quote)
Dim quotesCollection As QuotesCollection
quotesCollection = Me.LoadQuotes()
Dim dr As DataRow
dr = quotesCollection.NewRow()
dr(0) = quote._strQuote
dr(1) = quote._strOriginatorLastName
dr(2) = quote._strOriginatorFirstName
quotesCollection.Rows.Add(dr)
Dim strAppPath As String
strAppPath = Server.MapPath("")
Dim strFilePathXml As String
strFilePathXml = _
strAppPath + "\\app_data\\QuotesCollection.xml"
Dim strFilePathSchema As String
strFilePathSchema = _
strAppPath + "\\app_data\\QuotesCollection.xsd"
quotesCollection.WriteXmlSchema(strFilePathSchema)
quotesCollection.WriteXml(strFilePathXml)
End Sub
<WebMethod()> _
Public Function GetAllQuotes() As DataSet
Dim quotesCollection As QuotesCollection
quotesCollection = LoadQuotes()
Dim dataSet As DataSet
dataSet = New DataSet()
dataSet.Tables.Add(quotesCollection)
Return dataSet
End Function
End Class