LISTING 1: Visual Basic 6 code for the CalcSrv class. The class performs simple calculator operations based on the content of SOAP messages sent from the Flash front-end.

   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