⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trace.vb

📁 This is a book about vb.you could learn this from this book
💻 VB
字号:
Imports System
Imports System.IO
Imports System.Web.Services.Protocols

<AttributeUsage(AttributeTargets.Method)> _
Public Class TraceExtensionAttribute
		Inherits SoapExtensionAttribute

    Private _filename As String = "c:\log.txt"
    Private _priority As Integer

    Public Overrides ReadOnly Property ExtensionType As Type 
        Get
        	Return GetType(TraceExtension)
        End Get
    End Property

    Public Overrides Property Priority As Integer
        Get
            Return _priority
        End Get
        Set
            _priority = Value
        End Set
    End Property

    Public Property Filename As String
        Get
            Return _filename
        End Get
        Set
            _filename = Value
        End Set
    End Property
End Class

Public Class TraceExtension
    Inherits SoapExtension

    Private oldStream As Stream
    Private newStream As Stream
    Private _filename As String

    Public Overloads Overrides Function GetInitializer(ByVal methodInfo As LogicalMethodInfo, ByVal attribute As SoapExtensionAttribute) As Object
        Return CType(attribute, TraceExtensionAttribute).Filename
    End Function

    Public Overloads Overrides Function GetInitializer(ByVal serviceType As Type) As Object
        Return GetType(TraceExtension)
    End Function

    Public Overloads Overrides Sub Initialize(ByVal initializer As Object)
        _filename = CType(initializer, String)
    End Sub

    Public Overloads Overrides Sub ProcessMessage(ByVal message As SoapMessage)
        Select Case message.Stage

            Case SoapMessageStage.BeforeSerialize

            Case SoapMessageStage.AfterSerialize
                WriteOutput(message)

            Case SoapMessageStage.BeforeDeserialize
                WriteInput(message)

            Case SoapMessageStage.AfterDeserialize

            Case Else
                Throw New Exception("invalid stage")
        End Select
    End Sub

    Public Overrides Function ChainStream(ByVal stream As Stream) As Stream
        oldStream = stream
        Dim newStream As New MemoryStream()
        Return newStream
    End Function

    Public Sub WriteOutput(ByVal message As SoapMessage)
        newStream.Position = 0
        Dim fs As New FileStream(_filename, FileMode.Append, FileAccess.Write)
        Dim w As New StreamWriter(fs)
        w.WriteLine("---------------------------------- Response at " & DateTime.Now)
        w.Flush()
        Copy(newStream, fs)
        fs.Close()
        newStream.Position = 0
        Copy(newStream, oldStream)
    End Sub

    Public Sub WriteInput(ByVal message As SoapMessage)
        Copy(oldStream, newStream)
        Dim fs As New FileStream(_filename, FileMode.Append, FileAccess.Write)
        Dim w As New StreamWriter(fs)
        w.WriteLine("================================== Request at " & DateTime.Now)
        w.Flush()
        newStream.Position = 0
        Copy(newStream, fs)
        fs.Close()
        newStream.Position = 0
    End Sub

    Sub Copy(ByVal from As Stream, ByVal toStream As Stream)

        Dim reader As New StreamReader(from)
        Dim writer As New StreamWriter(toStream)
        writer.WriteLine(reader.ReadToEnd())
        writer.Flush()
    End Sub
End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -