Πώς να γράψετε εφαρμογές CGI σε Visual Basic

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 239588 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Μια εφαρμογή Common Gateway Interface (CGI) μπορεί να εγγραφεί σε οποιαδήποτε γλώσσα προγραμματισμού που παρέχουν πρόσβαση τόσο τις μεταβλητές περιβάλλοντος και STDIN ή STDOUT. Λόγω των ισχυρών κείμενο χειρισμό δυνατότητες της γλώσσας προγραμματισμού Microsoft Visual Basic, πολλοί προγραμματιστές Web που θέλετε να γράψετε τα προγράμματα CGI στη Visual Basic. Αυτό το άρθρο παρουσιάζει τις τεχνικές για τη σύνταξη εφαρμογών CGI σε Visual Basic και παρέχει ένα απλό δείγμα CGI Visual Basic.

Περισσότερες πληροφορίες

ΣΗΜΕΊΩΣΗ:Η Microsoft παρέχει παραδείγματα προγραμματισμού μόνο για επεξήγηση, χωρίς καμία εγγύηση, ρητή ή σιωπηρή. Αυτό περιλαμβάνει, αλλά δεν είναι ενδεικτικά, των σιωπηρών εγγυήσεων εμπορευσιμότητας ή καταλληλότητας για συγκεκριμένο σκοπό. Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού που παρουσιάζεται και με τα εργαλεία που χρησιμοποιούνται για τη δημιουργία και τον εντοπισμό σφαλμάτων διαδικασιών. Οι μηχανικοί υποστήριξης της Microsoft μπορούν να σας εξηγήσουν τη λειτουργικότητα μιας συγκεκριμένης διαδικασίας, αλλά δεν θα τροποποιήσουν αυτά τα παραδείγματα για να παράσχουν πρόσθετες λειτουργίες, ούτε θα δημιουργήσουν διαδικασίες, για να καλύψουν τις συγκεκριμένες απαιτήσεις.

Ανάκτηση των μεταβλητών περιβάλλοντος

Για να ανακτήσετε μια μεταβλητή περιβάλλοντος, χρησιμοποιήστε τη συνάρτηση Environ$ στη Visual Basic ως εξής:
VALUE = Environ$(NAME)

				
Σημειώστε ότι η μεταβλητή περιβάλλοντος που θέλετε να ανακτήσετε το ΌΝΟΜΑ. Η τιμή επιστρέφεται στην ΤΙΜΉ.

Ανάγνωση από το STDIN και εγγραφή στο STDOUT

Χρησιμοποιήστε τη συνάρτηση Win32 τη συνάρτηση ReadFile η ανάγνωση από το STDIN και τη συνάρτηση WriteFile για την εγγραφή STDOUT. Αυτές οι λειτουργίες απαιτούν να δώσετε ένα δείκτη χειρισμού STDIN ή STDOUT. Μπορείτε να χρησιμοποιήσετε τη συνάρτηση GetStdHandle για να λάβετε τις λαβές για να STDIN ή STDOUT. Σε αυτό το άρθρο, ομαλοποίηση χρησιμοποιείται για τη συνάρτηση GetStdHandle να απλοποιήσετε τις κλήσεις συναρτήσεων. Οι δηλώσεις για αυτές τις λειτουργίες είναι ως εξής:
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 ορίζονται ως εξής:
Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&
				
Ανατρέξτε στην τεκμηρίωση του MSDN για τον ορισμό του κάθε παράμετρο σε αυτές τις λειτουργίες. Στο ακόλουθο δείγμα, γίνεται σταθερή μια πλήρη λίστα των μεταβλητών περιβάλλοντος CGI. Αυτό παραθέτει σε λίστα όλες τις σταθερές μαζί σε ένα συνδυασμό πλήκτρων Ctrl-ι. Αυτό επίσης εξαλείφει σφάλματα προγραμματισμού, παρέχοντας μεταγλωττιστή και επικύρωση IntelliSense, αλλά δεν αποκλείει μπορείτε να πληκτρολογήσετε το δικό σας συμβολοσειρές.

Δείγμα κώδικα

Για λόγους ευκολίας, παγίδευση σφαλμάτων παραλείπεται στο ακόλουθο δείγμα (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 για να ελέγξετε το 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>
				

Βήματα για να δημιουργήσετε το απλό αρχείο CGI Hello.exe:

  1. Δημιουργήστε ένα νέο έργο ως έργο τυπικό .exe.
  2. Κατάργηση φόρμας από το έργο.
  3. Προσθέστε μια λειτουργική μονάδα στο έργο και ονομάστε το HELLO.
  4. Ορισμός Sub Main ως το αντικείμενο εκκίνησης (στην ενότητα Ιδιότητες έργου).
  5. Αντιγράψτε τον παραπάνω κώδικα Visual Basic και επικολλήστε την στη λειτουργική μονάδα.
  6. Να Hello.exe.
Σημειώσεις:
  • Το δείγμα κώδικα δείχνει τον τρόπο χειρισμού μιας αίτησης HTTP POST. Για να χειριστείτε μια αίτηση GET, την εφαρμογή CGI πρέπει να ανακτήσει τη μεταβλητή περιβάλλοντος QUERY_STRING. Η μεταβλητή QUERY_STRING περιέχει ζεύγη ονόματος/τιμής που διαχωρίζονται με το & με τη μορφή "όνομα = όνομα Joe & χρώμα = Red." Σημειώστε ότι χρησιμοποιείται η κωδικοποίηση URL, όλοι οι χώροι που μετατρέπονται σε +και όλοι οι ειδικοί χαρακτήρες όπως ! μετατρέπονται στις τιμές τους HEX ASCII. Με άλλα λόγια, συμβολοσειράς "Hello, World!" εμφανίζεται ως "Hello + World % 21." Οι εφαρμογές CGI Visual Basic πρέπει να υλοποιήσετε όλος ο κώδικας ανάλυσης.
  • Επειδή η εφαρμογή CGI έχει ξεκινήσει από την υπηρεσία, αυτό ενδέχεται να μην μπορείτε να αποκτήσετε πρόσβαση σε κοινόχρηστα στοιχεία δικτύου.
  • Έχετε υπόψη σας ότι CGI εκτελείται ως υπηρεσία, που επικοινωνεί με το διακομιστή. Επομένως, οπτική διασύνδεση φόρμες, τα στοιχεία ελέγχου και πλαίσια μηνυμάτων είναι εντελώς χωρίς κανένα νόημα. Ως μια matter του πράγματι, ένα πλαίσιο μηνύματος θα προκαλέσει μια εφαρμογή CGI για να σταματήσει να ανταποκρίνεται.
  • Χειρισμός σφαλμάτων θα πρέπει να διεξάγεται σε όλη τη διάρκεια μιας CGI κώδικα της Visual Basic, έτσι ώστε το προεπιλεγμένο πλαίσιο του μηνύματος λάθους δεν εμφανίζεται. Μπορείτε να καταγράφονται τα μηνύματα σφαλμάτων στο διακομιστή ή να τις εγγράφει στο πρόγραμμα περιήγησης του χρήστη.
  • Visual C διορθωτές να εντοπισμού σφαλμάτων σε εφαρμογές που έχουν δημιουργηθεί στη Visual Basic. Επομένως, μπορείτε να χρησιμοποιήσετε το CGI εντοπισμού σφαλμάτων τεχνικές που αναφέρεται παρακάτω. Για τον εντοπισμό σφαλμάτων σε μια εφαρμογή της Visual Basic με Visual C, επιλέξτε μεταγλώττιση σε τοπικό κώδικακαι, στη συνέχεια, επιλέξτε Δημιουργία συμβολικών πληροφοριών εντοπισμού σφαλμάτων και Βελτιστοποίηση όχι. Όταν ολοκληρωθεί και δημιουργείται το .exe, Visual C να επισυνάψετε σε εφαρμογή CGI εκτελούνται γραμμένα σε Visual Basic.
  • Για να δοκιμάσετε μια εφαρμογή CGI, αντιγράψτε το στον εικονικό κατάλογο IIS με δικαιώματα εκτέλεσης.
  • Έχετε υπόψη σας ότι μπορεί να προκαλέσει σφάλματα χρόνου εκτέλεσης ή παράθυρα διαλόγου στον κώδικα Visual Basic την εφαρμογή CGI για να σταματήσει να ανταποκρίνεται. Εάν η εφαρμογή CGI σταματά να ανταποκρίνεται, μπορεί να εκτελεστεί στο πρόγραμμα εντοπισμού σφαλμάτων Visual Studio. Για πρόσθετες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
    238788 Τον τρόπο εντοπισμού σφαλμάτων σε εφαρμογές CGI εκτελούνται με τις υπηρεσίες IIS

Αναφορές

RFC 2068, Hypertext Transfer Protocol
RFC κανονισμός, Uniform Resource Locators (URL).
238788 Τον τρόπο εντοπισμού σφαλμάτων σε εφαρμογές CGI εκτελούνται με τις υπηρεσίες IIS
207671 Πρόσβαση σε αρχεία του δικτύου από εφαρμογές IIS

Ιδιότητες

Αναγν. άρθρου: 239588 - Τελευταία αναθεώρηση: Πέμπτη, 30 Μαΐου 2013 - Αναθεώρηση: 3.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Internet Information Server 3.0
  • Οδηγός Microsoft Internet Information Services 6.0
Λέξεις-κλειδιά: 
kbcgi kbinfo kbmt KB239588 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη: 239588

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com