📄 trace.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 + -