Option Explicit
Public Sub Process(ByVal Request As ASPTypeLibrary.Request, _
ByVal Response As ASPTypeLibrary.Response)
Dim A As Double
Dim B As Double
Dim Answer As Double
Dim Serializer As MSSOAPLib.SoapSerializer
Dim Reader As MSSOAPLib.SoapReader
Dim MethodName As String
On Error Resume Next
Set Serializer = New MSSOAPLib.SoapSerializer
If Err Then
ServerFault Response, _
"Cannot create MSSOAP.SoapSerializer. " & _
Err.Description & "(0x" & Hex(Err.Number) & ")"
Exit Sub
End If
Set Reader = New MSSOAPLib.SoapReader
If Err Then
ServerFault Response, _
"Cannot create MSSOAP.SoapReader. " & _
Err.Description & "(0x" & Hex(Err.Number) & ")"
Exit Sub
End If
Reader.Load Request
If Err Then
ClientFault Response, "Cannot load request. " & _
Err.Description
Exit Sub
End If
MethodName = Reader.RPCStruct.baseName
If Err Then
ClientFault Response, _
"Cannot get method name. " & _
Err.Description
Exit Sub
End If
A = CDbl(Reader.RPCParameter("A").Text)
' or
' A = CDbl(Reader.RPCStruct.selectSingleNode("A").text)
If Err Then
ClientFault Response, _
"Cannot get parameter A. " & _
Err.Description
Exit Sub
End If
B = CDbl(Reader.RPCParameter("B").Text)
' or
' B = CDbl(Reader.RPCStruct.selectSingleNode("B").text)
If Err Then
ClientFault Response, _
"Cannot get parameter B. " & _
Err.Description
Exit Sub
End If
Select Case MethodName
Case "Add"
Answer = A + B
Case "Subtract"
Answer = A - B
Case "Divide"
Answer = A / B
Case "Multiply"
Answer = A * B
Case Else
ClientFault Response, _
"Unknown method: """ & MethodName & """."
Exit Sub
End Select
Response.ContentType = "text/xml"
Serializer.Init Response
Serializer.startEnvelope
Serializer.startBody
Serializer.startElement MethodName & "Response"
Serializer.startElement "Answer"
Serializer.writeString CStr(Answer)
Serializer.endElement
Serializer.endElement
Serializer.endBody
Serializer.endEnvelope
End Sub
Sub ServerFault(ByVal Response As ASPTypeLibrary.Response, _
ByVal FaultString As String)
ReturnFault Response, "Server", FaultString
End Sub
Sub ClientFault(ByVal Response As ASPTypeLibrary.Response, _
ByVal FaultString As String)
ReturnFault Response, "Client", FaultString
End Sub
Sub ReturnFault(ByVal Response As ASPTypeLibrary.Response, _
ByVal FaultCode As String, _
ByVal FaultString As String)
On Error Resume Next
Err.Clear
Dim Serializer As MSSOAPLib.SoapSerializer
Response.Status = "500 Internal Server Error"
Set Serializer = New MSSOAPLib.SoapSerializer
If Err Then
Response.AppendToLog _
"Could not create SoapSerializer object. " & _
Err.Description
Else
Serializer.Init Response
Serializer.startEnvelope
Serializer.startBody
Serializer.startFault FaultCode, FaultString
Serializer.startFaultDetail
Serializer.endFaultDetail
Serializer.endFault
Serializer.endBody
Serializer.endEnvelope
End If
End Sub
|