Kuidas kirjutada CGI rakenduste Visual Basic

Kokkuvõte

Common Gateway Interface (CGI) rakenduse saate kirjutada programmeerimise keel, millele on juurdepääs nii Keskkonnamuutujad ja STDIN või STDOUT. Võimas teksti käsitsemise võime Microsoft Visual Basic programmeerimise keel, sest paljud veebiarendajad tahan kirjutada CGI programmide Visual Basic. Käesoleva artikli kirjutamise CGI rakenduste Visual Basic tehnikat näitab ja pakub lihtne Visual Basic CGI näidis.

Lisateabe saamiseks

Märkus: Microsoft pakub programmeerimisnäiteid ainult artikli illustreerimiseks ilma igasuguse otsese või kaudse garantiita. See hõlmab, kuid ei piirdu kaudseid garantiisid turustatavuse või kindlaks otstarbeks sobivusega. See artikkel eeldab, et olete demonstreeritava programmeerimiskeelega programmeerimise keel ning luua protseduuride ja silumiseks kasutatavate tööriistadega tuttav. Microsofti tugitehnikud võivad aidata mõne konkreetse protseduuri funktsiooni selgitada, kuid ei muuda nad neid näiteid lisafunktsioonide pakkumiseks ega Koosta vastavaid protseduure teie konkreetsetele nõuetele.

Keskkonnamuutujate toomine

Keskkonnamuutuja hankida funktsiooni keskkonnakaitse$ Visual Basicu järgmiselt:

VALUE = Environ$(NAME)

Arvestage, et nimi on keskkonnamuutuja, mida soovite alla laadida. Selle sätte väärtus tagastatakse väärtus.

Stdin lugemise ja kirjutamise STDOUT

Funktsiooni Win32 ReadFile lugeda STDIN ja WriteFile funktsiooni STDOUT kirjutada. Need funktsioonid nõuavad teilt pide STDIN või STDOUT. GetStdHandle funktsiooni saada STDIN või STDOUT pidemed. Käesolevas artiklis kasutatakse aliasing GetStdHandle funktsiooni lihtsustada funktsiooni kõned. Deklaratsioonide need funktsioonid on järgmised:

Public Declare Function stdin Lib "kernel32" Alias "GetStdHandle" _
(Optional ByVal Handletype As Long = STD_INPUT_HANDLE) As Long

Public Declare Function stdout Lib "kernel32" Alias "GetStdHandle" _
(Optional ByVal Handletype As Long = STD_OUTPUT_HANDLE) As Long

Public Declare Function ReadFile Lib "kernel32" _
(ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, _
lpNumberOfBytesRead As Long, Optional ByVal lpOverlapped As Long = 0&) As Long

Public Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, Optional ByVal lpOverlapped As Long = 0&) As Long


GetStdHandle funktsioonile konstandid on määratletud järgmiselt:

Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&

Palun vaadake iga parameetri puhul need funktsioonid määratlus MSDN-i dokumentatsioonist. Järgmine näide CGI keskkonnamuutujaid täielik loetelu tehakse pidevalt. See on loetletud koos kohta Ctrl-J. konstandid See kõrvaldab programmeerimine vead, pakkudes kompilaator ja IntelliSense valideerimise, kuid ei takista teil sisestada oma stringe.

Näidiskood

Lihtsuse huvides puudub vea tuvastamiseks järgmisi proovis (Hello.bas):

Option Explicit

Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&

Public Const CGI_AUTH_TYPE As String = "AUTH_TYPE"
Public Const CGI_CONTENT_LENGTH As String = "CONTENT_LENGTH"
Public Const CGI_CONTENT_TYPE As String = "CONTENT_TYPE"
Public Const CGI_GATEWAY_INTERFACE As String = "GATEWAY_INTERFACE"
Public Const CGI_HTTP_ACCEPT As String = "HTTP_ACCEPT"
Public Const CGI_HTTP_REFERER As String = "HTTP_REFERER"
Public Const CGI_HTTP_USER_AGENT As String = "HTTP_USER_AGENT"
Public Const CGI_PATH_INFO As String = "PATH_INFO"
Public Const CGI_PATH_TRANSLATED As String = "PATH_TRANSLATED"
Public Const CGI_QUERY_STRING As String = "QUERY_STRING"
Public Const CGI_REMOTE_ADDR As String = "REMOTE_ADDR"
Public Const CGI_REMOTE_HOST As String = "REMOTE_HOST"
Public Const CGI_REMOTE_USER As String = "REMOTE_USER"
Public Const CGI_REQUEST_METHOD As String = "REQUEST_METHOD"
Public Const CGI_SCRIPT_NAME As String = "SCRIPT_NAME"
Public Const CGI_SERVER_NAME As String = "SERVER_NAME"
Public Const CGI_SERVER_PORT As String = "SERVER_PORT"
Public Const CGI_SERVER_PROTOCOL As String = "SERVER_PROTOCOL"
Public Const CGI_SERVER_SOFTWARE As String = "SERVER_SOFTWARE"

Public Declare Function Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long) As Long

Public Declare Function stdin Lib "kernel32" Alias "GetStdHandle" _
(Optional ByVal Handletype As Long = STD_INPUT_HANDLE) As Long

Public Declare Function stdout Lib "kernel32" Alias "GetStdHandle" _
(Optional ByVal Handletype As Long = STD_OUTPUT_HANDLE) As Long

Public Declare Function ReadFile Lib "kernel32" _
(ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, _
lpNumberOfBytesRead As Long, Optional ByVal lpOverlapped As Long = 0&) As Long

Public Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, Optional ByVal lpOverlapped As Long = 0&) As Long

Sub Main()

Dim sReadBuffer As String
Dim sWriteBuffer As String
Dim lBytesRead As Long
Dim lBytesWritten As Long
Dim hStdIn As Long
Dim hStdOut As Long
Dim iPos As Integer

' sleep for one minute so the debugger can attach and set a break
' point on line below
' Sleep 60000

sReadBuffer = String$(CLng(Environ$(CGI_CONTENT_LENGTH)), 0)

' Get STDIN handle
hStdIn = stdin()
' Read client's input
ReadFile hStdIn, sReadBuffer, Len(sReadBuffer), lBytesRead

' Find '=' in the name/value pair and parse the buffer
iPos = InStr(sReadBuffer, "=")
sReadBuffer = Mid$(sReadBuffer, iPos + 1)

' Construct and send response to the client
sWriteBuffer = "HTTP/1.0 200 OK" & vbCrLf & "Content-Type: text/html" & _
vbCrLf & vbCrLf & "Hello "
hStdOut = stdout()
WriteFile hStdOut, sWriteBuffer, Len(sWriteBuffer) + 1, lBytesWritten
WriteFile hStdOut, sReadBuffer, Len(sReadBuffer), lBytesWritten

End Sub


HTML-vormi testida CGI (Test.htm)

<HTML>
<HEAD>
<TITLE>Testing VB CGI</TITLE>
</HEAD>
<BODY>
<FORM action="/cgi-bin/hello.exe" method="POST">
<INPUT TYPE="TEXT" NAME="Name"> Name<BR>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>


Juhised failide lihtsustatud CGI Hello.exe luua.

  1. Loo uus projekt projekti standard .exe.

  2. Projekti vormi eemaldada.

  3. Mooduli lisada projekti ja Tere nime.

  4. Seadke Sub peamised käivitus objektina (jaotises projekti atribuudid).

  5. Ülaltoodud Visual Basicu koodi kopeerida ja kleepida moodulisse.

  6. Tee Hello.exe.

Märkused:

  • Kood näitab, kuidas HTTP POST-taotluse töötlemiseks. GET-nõude toimetulekuks CGI-rakendus tuleb tuua QUERY_STRING keskkonnamuutuja. Muutuja QUERY_STRING sisaldab nime/väärtuse paari eraldatud & vormingus "nimi = Joe & Color = Red." Pange tähele, et URL-i kasutatakse, teisendatakse kõik tühikud +teisendatakse kõik erimärgid nagu ! oma HEX ASCII väärtusi. Teiste sõnadega "Tere, maailm!" string on esindab "Hello + maailma % 21." Visual Basic CGI rakendused peavad rakendama kõik sõelumiskood.

  • Kuna CGI-rakendus on käivitatud teenus, ei pruugi see ligipääsu võrgu ühiskasutusele.

  • Pange tähele, et CGI töötab teenusena, mis suhtleb serveriga. Seetõttu on täiesti tähtsusetute visuaalne kasutajaliides vormid, juhtelemendid ja sõnumi väljadele. Tegelikult, põhjustab teateboks CGI-rakendus reageerimise lõpetada.

  • Tõrketöötlus viiakse läbi kogu CGI Visual Basicu koodi, et vaikimisi tõrketeate dialoogiboks ei kuvata. Saate logida tõrketeated server või kirjutada kasutaja brauseri.

  • Visual C silumistööriistadel saab siluda taotluste kirjutatud Visual Basic. Seetõttu saate CGI silumine allpool kirjeldatud meetodeid. Visual Basicu rakenduse Visual c siluda valida Compile kompileeribja valige Luua sümboolse Debug Info ja No optimeerimine. Kui see on lõpule viidud ja .exe on loodud, saate lisada Visual C töötavad CGI-rakendus, mis on kirjutatud Visual Basic.

  • CGI-rakendus testimiseks kopeerige see IIS-i virtuaalkataloogi koos käivitusõigusi.

  • Pange tähele, käitustõrgete parandamine või Visual Basicu koodi dialoogiboksid võivad põhjustada CGI rakendus reageerimise lõpetada. Kui CGI-rakendus lakkab reageerimast, saate seda käivitada Visual Studio siluri. Kohta lisateabe saamiseks klõpsake Microsofti teabebaasi (Knowledge Base) artikli kuvamiseks artiklinumbrit:

    kuidas siluda CGI rakenduste töötav IIS-i

Viited



kuidas siluda CGI rakenduste töötav IIS-i

juurdepääsu võrgufailide IIS-i rakendused

Kas vajate veel abi?

Täiendage oma oskusi
Tutvuge koolitusmaterjalidega
Kasutage uusi funktsioone enne teisi
Liitu Microsofti Insideri programmis osalejad

Kas sellest teabest oli abi?

Täname tagasiside eest!

Täname tagasiside eest! Tundub, et võiksime teid kokku viia ühega meie Office'i tugiagentidest, kes aitab teil probleemi lahendada.

×