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

📄 secureservice.asmx

📁 asp.net技术内幕的书配源码
💻 ASMX
字号:
<%@ WebService Class="SecureService" debug="True"%>

Imports System
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Data
Imports System.Data.SqlClient

<WebService( Namespace:="http://yourdomain.com/webservices" )> _
Public Class SecureService : Inherits WebService

Public AuthenticationHeader As AuthHeader

<WebMethod()> Public Function Login( username As String, password As String ) As ServiceTicket

  Dim conMyData As SqlConnection
  Dim cmdCheckPassword As SqlCommand
  Dim parmWork As SqlParameter
  Dim intUserID As Integer
  Dim intRole As Integer 
  Dim objServiceTicket As ServiceTicket
  Dim drowSession As DataRow

  ' Initialize Sql command
  conMyData = New SqlConnection( "Server=localhost;UID=sa;pwd=secret;database=myData" )
  cmdCheckPassword = New SqlCommand( "CheckPassword", conMyData )
  cmdCheckPassword.CommandType = CommandType.StoredProcedure

  ' Add parameters
  parmWork = cmdCheckPassword.Parameters.Add( _
    New SqlParameter( "@validuser", SqlDbType.Int ) )
  parmWork.Direction = ParameterDirection.ReturnValue
  cmdCheckPassword.Parameters.Add( _
    New SqlParameter( "@username", username ) )
  cmdCheckPassword.Parameters.Add( _
    New SqlParameter( "@password", password ) )
  parmWork = cmdCheckPassword.Parameters.Add( _
    New SqlParameter( "@sessionkey", SqlDbType.UniqueIdentifier ) )
  parmWork.Direction = ParameterDirection.Output
  parmWork = cmdCheckPassword.Parameters.Add( _
    New SqlParameter( "@expiration", SqlDbType.DateTime ) )
  parmWork.Direction = ParameterDirection.Output
  parmWork = cmdCheckPassword.Parameters.Add( _
    New SqlParameter( "@userID", SqlDbType.Int ) )
  parmWork.Direction = ParameterDirection.Output
  parmWork = cmdCheckPassword.Parameters.Add( _
    New SqlParameter( "@role", SqlDbType.Int ) )
  parmWork.Direction = ParameterDirection.Output

  ' Execute the command
  conMyData.Open()
    cmdCheckPassword.ExecuteNonQuery()
    objServiceTicket = New ServiceTicket
    If cmdCheckPassword.Parameters( "@validuser" ).Value = 0 Then
      objServiceTicket.IsAuthenticated = True
    objServiceTicket.SessionKey = cmdCheckPassword.Parameters( "@sessionkey" ).Value.ToString()
    objServiceTicket.Expiration = cmdCheckPassword.Parameters( "@expiration" ).Value    
    intUserID = cmdCheckPassword.Parameters( "@userID" ).Value
    intRole = cmdCheckPassword.Parameters( "@role" ).Value
    Else
      objServiceTicket.IsAuthenticated = False
    End If
  conMyData.Close()

  ' Add session to cache
  If objServiceTicket.IsAuthenticated Then
    If Context.Cache( "SessionKeys" ) Is Nothing Then
      LoadSessionKeys
    End If
    drowSession = Context.Cache( "SessionKeys" ).NewRow()
    drowSession( "session_key" ) = objServiceTicket.SessionKey
    drowSession( "session_expiration" ) = objServiceTicket.Expiration
    drowSession( "session_userID" ) = intUserID
    drowSession( "session_username" ) = username
    drowSession( "Session_role" ) = intRole
    Context.Cache( "SessionKeys" ).Rows.Add( drowSession )
  End If

  ' Return ServiceTicket
  Return objServiceTicket
End Function

<WebMethod(), SoapHeader( "AuthenticationHeader" )> _
Public Function GetLuckyNumber As Integer
  If Authenticate( AuthenticationHeader ) Then
    Return 7
  End If  
End Function

Private Sub LoadSessionKeys
  Dim conMyData As SqlConnection
  Dim dadMyData As SqlDataAdapter
  Dim dstSessionKeys As DataSet

  conMyData = New SqlConnection( "Server=localhost;UID=sa;PWD=secret;database=myData" )
  dadMyData = New SqlDataAdapter( "LoadSessionKeys", conMyData )
  dadMyData.SelectCommand.CommandType = CommandType.StoredProcedure
  dstSessionKeys = New DataSet
  dadMyData.Fill( dstSessionKeys, "SessionKeys" )
  Context.Cache.Insert( _
    "SessionKeys", _
     dstSessionKeys.Tables( "SessionKeys" ), _
     Nothing, _
     DateTime.Now.AddHours( 3 ), _
     TimeSpan.Zero )
End Sub

Private Function Authenticate( objAuthenticationHeader ) As Boolean
  Dim arrSessions As DataRow()
  Dim strMatch As String

  ' Load Session keys
  If Context.Cache( "SessionKeys" ) Is Nothing Then
    LoadSessionKeys
  End If

  ' Test for match
  strMatch = "session_key='" & objAuthenticationHeader.SessionKey
  strMatch &= "' And session_expiration > #" & DateTime.Now() & "#"
  arrSessions = Context.Cache( "SessionKeys" ).Select( strMatch )
  If arrSessions.Length > 0 Then
    Return True
  Else
    Return False
  End If  
End Function 
End Class

Public Class AuthHeader:Inherits SoapHeader
  Public SessionKey As String
End Class

Public Class ServiceTicket
  Public IsAuthenticated As Boolean
  Public SessionKey As String
  Public Expiration As DateTime
End Class

      

⌨️ 快捷键说明

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