Figure 3
Figure 3 TimeService.asmx
<%@ WebService Language="VB" Class="TimeService"%>
' The previous header line tells ASP.NET that this file contains
' a Web Service written in the Visual Basic language
' and that the name of the class providing that service
' is TimeService
' Import the namespaces (think of them as references)
' required for a web service
Imports System
Imports System.Web.Services
' Declare a new class for our new service. It must inherit
' from the system-provided base class WebService
Public Class TimeService : Inherits WebService
' Place our functions in the class.
' Mark them as WebMethods
Public Function <WebMethod()> GetTime (ShowSeconds as Boolean)
As String
' Perform the business logic of our function
' Find current time, format as requested, and
' return the string
Dim dt as DateTime
If (ShowSeconds = TRUE) Then
GetTime = dt.Now.ToLongTimeString
Else
GetTime = dt.Now.ToShortTimeString
Endif
End Function
End Class
Figure 6 Excerpts from Sample Web Service SDL Contract
<?xml version="1.0"?>
<serviceDescription name="TimeService">
<httpget>
<service>
<requestResponse name="GetTime"
href="https://localhost/AspxTimeDemo/TimeService.asmx/GetTime">
<request>
<param name="ShowSeconds"/>
</request>
<response>
<mimeXml ref="s1:string"/>
</response>
</requestResponse>
</service>
</httpget>
<! descriptions of other protocols, httpget and soap, go here >
<schema>
<element name="GetTime">
<complexType>
<element name="ShowSeconds" type="boolean"/>
</complexType>
</element>
<element name="GetTimeResult">
<complexType>
<element name="result" type="string" nullable="true"/>
</complexType>
</element>
</schema>
</serviceDescription>
Figure 8 HTTP POST Support
<httppost>
<service>
<requestResponse name="GetTime" href="https://localhost/
aspxtimedemo/timeservice.asmx/GetTime">
<request>
<form>
<input name="ShowSeconds"/>
</form>
</request>
<response>
<mimeXml ref="s1:string"/>
</response>
</requestResponse>
</service>
</httppost>
Figure 10 HTML Code for the Form
<form METHOD="POST" ACTION="https://localhost/aspxtimedemo/
timeservice.asmx/GetTime">
<p>Would you like to show the seconds digits ?</p>
<blockquote>
<p><input TYPE="RADIO" NAME="ShowSeconds" VALUE="True" CHECKED> True
<input TYPE="RADIO" NAME="ShowSeconds" VALUE="False"> False<br>
</p>
</blockquote>
<input TYPE="SUBMIT" VALUE="Submit Form"> <input TYPE="RESET"
VALUE="Reset Form">
</form>
Figure 11 Portion of SDL File
<soap xmlns="urn:schemas-xmlsoap-org:soap-sdl-2000-01-25">
<service>
<addresses>
<address uri="https://localhost/aspxtimedemo/timeservice.asmx"/>
</addresses>
<requestResponse name="GetTime" soapAction="https://tempuri.org/
GetTime">
<request ref="s0:GetTime"/>
<response ref="s0:GetTimeResult"/>
</requestResponse>
</service>
</soap>
Figure 13 SOAP Proxy Class Generated by WebServiceUtil
'
' <autogenerated>
' This class was generated by a tool.
' Runtime Version: 2000.14.1812.10
'
' Changes to this file may cause incorrect behavior
' and will be lost if the code is regenerated.
' </autogenerated>
'
Imports System.Xml.Serialization
Imports System.Web.Services.Protocols
Imports System.Web.Services
Public Class TimeService
Inherits System.Web.Services.Protocols.SoapClientProtocol
Public Sub New()
MyBase.New
Me.Path = "https://localhost/aspxtimedemo/timeservice.asmx"
End Sub
Public Function
"<System.Web.Services.Protocols.SoapMethodAttribute(" _ &
"https://tempuri.org/ GetTime"), _ &
"System.Web.Services.Protocols.SoapParameterAttribute _
("showSeconds", ElementName:="ShowSeconds")> _
GetTime(ByVal showSeconds As Boolean) As String
Dim results As Object() = Me.Invoke(" _
GetTime", New Object() {showSeconds})
Return CType(results(0), String)
End Function
Public Function BeginGetTime(ByVal showSeconds As Boolean, _
ByVal callback As System.AsyncCallback, _
ByVal asyncState As Object) As System.IAsyncResult
return Me.BeginInvoke("GetTime", New Object() {showSeconds},
callback, asyncState)
End Function
Public Function EndGetTime(ByVal asyncResult As System.IAsyncResult)
As String
Dim results As Object() = Me.EndInvoke(asyncResult)
return CType(results(0),String)
End Function
End Class
Figure 14 Accessing the SOAP Proxy
Public Class Form1
Inherits System.WinForms.Form
' User clicked GetTime button
Protected Sub btnGetTimeSynch_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs)
' Create new object of proxy class
Dim ThisTimeServiceProxy As New TimeService()
' Set the Path property to that specified by the user
ThisTimeServiceProxy.Path = TextBox2.Text
' Actually call the function. Put returned result into text box
' for user to see
TextBox1.Text =
ThisTimeServiceProxy.GetTime(CheckBox1.Checked)
End Sub
' Commence the asynchronous call to get the time
Dim AsyncTimeServiceProxy As TimeService
Dim AsyncResult As IAsyncResult
Protected Sub btn_BeginGetTimeAsync_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs)
AsyncTimeServiceProxy = New TimeService
AsyncResult = AsyncTimeServiceProxy.BeginGetTime(CheckBox1.Checked,
Nothing, Nothing)
End Sub
' Check to see if the operation has completed
Protected Sub btnPollForComplete_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs)
If (AsyncResult.IsCompleted) Then
MsgBox("Complete")
Else
MsgBox("Not Complete")
End If
End Sub
' Harvest the results of the asynchronous call for getting the time
Protected Sub btnEndGetTimeAsync_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs)
TextBox1.text = AsyncTimeServiceProxy.EndGetTime(AsyncResult)
AsyncTimeServiceProxy = Nothing
End Sub
End Class
Figure 18 Web Service Code File
Imports System
Imports System.Collections
Imports System.Core
Imports System.ComponentModel
Imports System.Configuration
Imports System.Web.Services
Imports System.Diagnostics
Imports System.Data
Namespace VS7DemoTimeService
Public Class WebService1
Inherits System.Web.Services.WebService
Public Function <WebMethod()> GetTime(ByVal ShowSeconds As
Boolean) As String
' Perform the business logic of our function
' Find current time, format as requested, and
' return the string
Dim dt As DateTime
Dim out As String
out = "The time is now: "
If (ShowSeconds = True) Then
out = out + dt.Now.ToLongTimeString
Else
out = out + dt.Now.ToShortTimeString
End If
' If CallersToday application property is nothing, then it's
' the first time
' we've run this app. Put in a value of '1', because the caller
' counts
If (Application("TotalCallers") = Nothing) Then
Application("TotalCallers") = 1
Else
' Update application state to tell user how many callers
' have asked
Application("TotalCallers") =
Convert.ToInt32(Application("TotalCallers")) + 1
End If
' Format string to tell caller about it
out = out + "and you're the "
out = out + Convert.ToString(Application("TotalCallers"))
out = out + "th person to ask me"
' If LastTimeYouCalled property is nothing, then tell use
If (Session("LastTimeThisGuyAsked") = Nothing) Then
out = out + ", but you haven't asked before"
Else
out = out + " and you last asked at " + _
Convert.ToString(Session("LastTimeThisGuyAsked"))
End If
Session("LastTimeThisGuyAsked") = dt.Now.ToLongTimeString
GetTime = out
End Function
End Class
End Namespace