Freigeben über


SoapMessage-Klasse

Stellt die Daten in einer SOAP-Anforderung oder SOAP-Antwort auf einer bestimmten SoapMessageStage dar.

Namespace: System.Web.Services.Protocols
Assembly: System.Web.Services (in system.web.services.dll)

Syntax

'Declaration
Public MustInherit Class SoapMessage
'Usage
Dim instance As SoapMessage
public abstract class SoapMessage
public ref class SoapMessage abstract
public abstract class SoapMessage
public abstract class SoapMessage

Hinweise

Die SoapMessage-Klasse wird hauptsächlich für SOAP-Erweiterungen verwendet, die Daten in einer SOAP-Anforderung oder SOAP-Antwort darstellen. Wenn die ProcessMessage-Methode aufgerufen wird, empfängt eine SoapExtension eine SoapMessage während jeder SoapMessageStage. Die Verarbeitung der SoapMessage bleibt der entsprechenden SOAP-Erweiterung überlassen. Zu den häufigsten SOAP-Erweiterungen gehören Verschlüsselung und Kompression.

SOAP-Erweiterungen können auf eine mit ASP.NET erstellte XML-Webdienstmethode oder einen XML-Webdienstclient oder sowohl auf eine mit ASP.NET erstellte XML-Webdienstmethode als auch auf einen XML-Webdienstclient angewendet werden. Wenn eine SOAP-Erweiterung auf eine XML-Webdienstmethode angewendet wird, empfängt die ProcessMessage-Methode eine Instanz von SoapServerMessage, die von SoapMessage abgeleitet ist. Entsprechend empfängt ProcessMessage eine Instanz von SoapClientMessage, wenn eine SOAP-Erweiterung auf einen XML-Webdienstclient angewendet wird.

Beispiel

' Process the SOAP message received and write to log file.
Public Overrides Sub ProcessMessage(message As SoapMessage)
   Select Case message.Stage
      Case SoapMessageStage.BeforeSerialize
         WriteOutputBeforeSerialize(message)
      Case SoapMessageStage.AfterSerialize
         WriteOutputAfterSerialize(message)
      Case SoapMessageStage.BeforeDeserialize
         WriteInputBeforeDeserialize(message)
      Case SoapMessageStage.AfterDeserialize
         WriteInputAfterDeserialize(message)
      Case Else
            Throw New Exception("invalid stage")
   End Select
End Sub 'ProcessMessage

' Write the contents of the outgoing SOAP message to the log file.
Public Sub WriteOutputBeforeSerialize(message As SoapMessage)
   Dim myFileStream As New FileStream( _
      filename, FileMode.Append, FileAccess.Write)
   Dim myStreamWriter As New StreamWriter(myFileStream)
   myStreamWriter.WriteLine( _
      "================================== Request at " & _
      DateTime.Now)
   myStreamWriter.WriteLine("The method that has been invoked is: ")
   myStreamWriter.WriteLine(ControlChars.Tab & message.MethodInfo.ToString())
   myStreamWriter.WriteLine("The contents of the SOAPAction HTTP header is:")
   myStreamWriter.WriteLine(ControlChars.Tab & message.Action)
   myStreamWriter.WriteLine("The contents of HTTP Content-type header is:")
   myStreamWriter.WriteLine(ControlChars.Tab & message.ContentType)
   If message.OneWay Then
      myStreamWriter.WriteLine( _
         "The method invoked on the client shall not wait" & _
         " till the server finishes")
   Else
      myStreamWriter.WriteLine( _
         "The method invoked on the client shall wait" & _
         " till the server finishes")
   End If
   myStreamWriter.WriteLine( _
      "The site where the XML Web service is available is: ")
   myStreamWriter.WriteLine(ControlChars.Tab & message.Url)
   myStreamWriter.WriteLine("The values of the in parameters are:")
   myStreamWriter.WriteLine("Value of first in parameter: {0}", _
      message.GetInParameterValue(0))
   myStreamWriter.WriteLine("Value of second in parameter: {0}", _
      message.GetInParameterValue(1))
   myStreamWriter.WriteLine()
   myStreamWriter.Flush()
   myStreamWriter.Close()
   myFileStream.Close()
End Sub 'WriteOutputBeforeSerialize

' Write the contents of the incoming SOAP message to the log file.
Public Sub WriteInputAfterDeserialize(message As SoapMessage)
   Dim myFileStream As _
      New FileStream(filename, FileMode.Append, FileAccess.Write)
   Dim myStreamWriter As New StreamWriter(myFileStream)
   myStreamWriter.WriteLine()
   myStreamWriter.WriteLine("The values of the out parameter are:")
   myStreamWriter.WriteLine("The value of the out parameter is: {0}", _
      message.GetOutParameterValue(0))
   myStreamWriter.WriteLine("The values of the return parameter are:")
   myStreamWriter.WriteLine("The value of the return parameter is: {0}", _
      message.GetReturnValue())
   myStreamWriter.Flush()
   myStreamWriter.Close()
   myFileStream.Close()
End Sub 'WriteInputAfterDeserialize
// Process the SOAP message received and write to log file.
public override void ProcessMessage(SoapMessage message) 
{
   switch (message.Stage) 
   {
      case SoapMessageStage.BeforeSerialize:
         WriteOutputBeforeSerialize(message);
         break;
      case SoapMessageStage.AfterSerialize:
         WriteOutputAfterSerialize(message);
         break;
      case SoapMessageStage.BeforeDeserialize:
         WriteInputBeforeDeserialize(message);
         break;
      case SoapMessageStage.AfterDeserialize:
         WriteInputAfterDeserialize(message);
         break;
      default:
         throw new Exception("invalid stage");
   }
}

// Write the contents of the outgoing SOAP message to the log file.
public void WriteOutputBeforeSerialize(SoapMessage message)
{
   FileStream myFileStream = 
      new FileStream(filename, FileMode.Append, FileAccess.Write);
   StreamWriter myStreamWriter = new StreamWriter(myFileStream);
   myStreamWriter.WriteLine("================================== Request at "
      + DateTime.Now);
   myStreamWriter.WriteLine("The method that has been invoked is: ");
   myStreamWriter.WriteLine("\t" + message.MethodInfo);
   myStreamWriter.WriteLine(
      "The contents of the SOAPAction HTTP header is:");
   myStreamWriter.WriteLine("\t" + message.Action);
   myStreamWriter.WriteLine("The contents of HTTP Content-type header is:");
   myStreamWriter.WriteLine("\t" + message.ContentType);
   if(message.OneWay)
      myStreamWriter.WriteLine(
         "The method invoked on the client shall not wait"
         + " till the server finishes");
   else
      myStreamWriter.WriteLine(
         "The method invoked on the client shall wait"
         + " till the server finishes");
   myStreamWriter.WriteLine(
      "The site where the XML Web service is available is:");
   myStreamWriter.WriteLine("\t" + message.Url);
   myStreamWriter.WriteLine("The values of the in parameters are:");
   myStreamWriter.WriteLine("Value of first in parameter: {0}",
      message.GetInParameterValue(0));
   myStreamWriter.WriteLine("Value of second in parameter: {0}",
      message.GetInParameterValue(1));
   myStreamWriter.WriteLine();
   myStreamWriter.Flush();
   myStreamWriter.Close();
   myFileStream.Close();
}

// Write the contents of the incoming SOAP message to the log file.
public void WriteInputAfterDeserialize(SoapMessage message)
{
   FileStream myFileStream = 
      new FileStream(filename, FileMode.Append, FileAccess.Write);
   StreamWriter myStreamWriter = new StreamWriter(myFileStream);
   myStreamWriter.WriteLine();
   myStreamWriter.WriteLine("The values of the out parameter are:");
   myStreamWriter.WriteLine("The value of the out parameter is: {0}",
      message.GetOutParameterValue(0));
   myStreamWriter.WriteLine("The values of the return parameter are:");
   myStreamWriter.WriteLine("The value of the return parameter is: {0}",
      message.GetReturnValue());
   myStreamWriter.Flush();
   myStreamWriter.Close();
   myFileStream.Close();
}
// Process the SOAP message received and write to log file.
virtual void ProcessMessage( SoapMessage^ message ) override
{
   switch ( message->Stage )
   {
      case SoapMessageStage::BeforeSerialize:
         WriteOutputBeforeSerialize( message );
         break;
      case SoapMessageStage::AfterSerialize:
         WriteOutputAfterSerialize( message );
         break;
      case SoapMessageStage::BeforeDeserialize:
         WriteInputBeforeDeserialize( message );
         break;
      case SoapMessageStage::AfterDeserialize:
         WriteInputAfterDeserialize( message );
         break;
      default:
         throw gcnew Exception( "invalid stage" );
   }
}

// Write the contents of the outgoing SOAP message to the log file.
void WriteOutputBeforeSerialize( SoapMessage^ message )
{
   FileStream^ myFileStream =
      gcnew FileStream( filename, FileMode::Append, FileAccess::Write );
   StreamWriter^ myStreamWriter = gcnew StreamWriter( myFileStream );
   myStreamWriter->WriteLine( "================================== Request at {0}",
      DateTime::Now );
   
   myStreamWriter->WriteLine(
      "The method that has been invoked is: " );
   myStreamWriter->WriteLine( "\t{0}", message->MethodInfo );

   myStreamWriter->WriteLine( "The contents of the SOAPAction HTTP header is:" );
   myStreamWriter->WriteLine( "\t{0}", message->Action );

   myStreamWriter->WriteLine( "The contents of HTTP Content-type header is:" );
   myStreamWriter->WriteLine( "\t{0}", message->ContentType );

   if ( message->OneWay )
   {
      myStreamWriter->WriteLine(
         "The method invoked on the client shall not wait"
         + " till the server finishes" );
   }
   else
   {
      myStreamWriter->WriteLine(
         "The method invoked on the client shall wait"
         + " till the server finishes" );
   }

   myStreamWriter->WriteLine(
      "The site where the XML Web service is available is:" );
   myStreamWriter->WriteLine( "\t{0}", message->Url );

   myStreamWriter->WriteLine( "The values of the in parameters are:" );
   myStreamWriter->WriteLine(
      "Value of first in parameter: {0}", message->GetInParameterValue( 0 ) );
   myStreamWriter->WriteLine(
      "Value of second in parameter: {0}", message->GetInParameterValue( 1 ) );

   myStreamWriter->WriteLine();
   myStreamWriter->Flush();
   myStreamWriter->Close();
   myFileStream->Close();
}

// Write the contents of the incoming SOAP message to the log file.
void WriteInputAfterDeserialize( SoapMessage^ message )
{
   FileStream^ myFileStream =
      gcnew FileStream( filename, FileMode::Append, FileAccess::Write );
   StreamWriter^ myStreamWriter = gcnew StreamWriter( myFileStream );
   myStreamWriter->WriteLine();
   
   myStreamWriter->WriteLine( "The values of the out parameter are:" );
   myStreamWriter->WriteLine(
      "The value of the out parameter is: {0}", message->GetOutParameterValue( 0 ) );

   myStreamWriter->WriteLine( "The values of the return parameter are:" );
   myStreamWriter->WriteLine(
      "The value of the return parameter is: {0}", message->GetReturnValue() );

   myStreamWriter->Flush();
   myStreamWriter->Close();
   myFileStream->Close();
}
// Process the SOAP message received and write to log file.
public void ProcessMessage(SoapMessage message) throws Exception
{
    switch (message.get_Stage()) {
        case SoapMessageStage.BeforeSerialize:
            WriteOutputBeforeSerialize(message);
            break;

        case SoapMessageStage.AfterSerialize:
            WriteOutputAfterSerialize(message);
            break;

        case SoapMessageStage.BeforeDeserialize:
            WriteInputBeforeDeserialize(message);
            break;

        case SoapMessageStage.AfterDeserialize:
            WriteInputAfterDeserialize(message);
            break;

        default:
            throw new Exception("invalid stage");
    }
} //ProcessMessage

// Write the contents of the outgoing SOAP message to the log file.
public void WriteOutputBeforeSerialize(SoapMessage message)
{
    FileStream myFileStream = new FileStream(fileName, FileMode.Append, 
        FileAccess.Write);
    StreamWriter myStreamWriter = new StreamWriter(myFileStream);
    myStreamWriter.WriteLine("================================== "
        + "Request at " + DateTime.get_Now());
    myStreamWriter.WriteLine("The method that has been invoked is: ");
    myStreamWriter.WriteLine("\t" + message.get_MethodInfo());

    myStreamWriter.WriteLine("The contents of the SOAPAction HTTP "
        + "header is:");
    myStreamWriter.WriteLine("\t" + message.get_Action());

    myStreamWriter.WriteLine("The contents of HTTP Content-type "
        + "header is:");
    myStreamWriter.WriteLine("\t" + message.get_ContentType());

    if (message.get_OneWay()) {
        myStreamWriter.WriteLine("The method invoked on the client "
            + "shall not wait till the server finishes");
    }
    else {
        myStreamWriter.WriteLine("The method invoked on the client "
            + "shall wait till the server finishes");
    }

    myStreamWriter.WriteLine("The site where the XML Web service is "
        + "available is:");
    myStreamWriter.WriteLine("\t" + message.get_Url());

    myStreamWriter.WriteLine("The values of the in parameters are:");
    myStreamWriter.WriteLine("Value of first in parameter: {0}", message.                          GetInParameterValue(0));
    myStreamWriter.WriteLine("Value of second in parameter: {0}", message.                     GetInParameterValue(1));
    
    myStreamWriter.WriteLine();
    myStreamWriter.Flush();
    myStreamWriter.Close();
    myFileStream.Close();
} //WriteOutputBeforeSerialize

// Write the contents of the incoming SOAP message to the log file.
public void WriteInputAfterDeserialize(SoapMessage message)
{
    FileStream myFileStream = new FileStream(fileName, FileMode.Append, 
        FileAccess.Write);
    StreamWriter myStreamWriter = new StreamWriter(myFileStream);
    myStreamWriter.WriteLine();
    myStreamWriter.WriteLine("The values of the out parameter are:");
    myStreamWriter.WriteLine("The value of the out parameter is: {0}", 
        message.GetOutParameterValue(0));

    myStreamWriter.WriteLine("The values of the return parameter are:");
    myStreamWriter.WriteLine("The value of the return parameter is: {0}", 
        message.GetReturnValue());

    myStreamWriter.Flush();
    myStreamWriter.Close();
    myFileStream.Close();
} //WriteInputAfterDeserialize

Vererbungshierarchie

System.Object
  System.Web.Services.Protocols.SoapMessage
     System.Web.Services.Protocols.SoapClientMessage
     System.Web.Services.Protocols.SoapServerMessage

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

SoapMessage-Member
System.Web.Services.Protocols-Namespace