CGI uygulamalarını Visual Basic içinde yazmak nasıl

Makale çevirileri Makale çevirileri
Makale numarası: 239588 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Bir ortak ağ geçidi arabirimi (CGI) uygulamasının hem ortam değişkenleri ve STDIN veya STDOUT erişebilen tüm programlama dilinde yazılabilir. Microsoft Visual Basic programlama dilinin yetenek işleme güçlü metin, birçok Web geliştiricileri Visual Basic'te CGI programları yazmak istiyorum. Bu makalede, CGI uygulamalarını Visual Basic içinde yazmak için teknikler gösterilmiştir ve basit bir Visual Basic CGI örneği sağlar.

Daha fazla bilgi

NOT:Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar, zımni veya açık garanti vermez. Bu garanti satılabilirlik veya belirli bir amaca uygunluk zımni garantilerini içerir, ancak bunlarla sınırlı değildir. Bu makalede, gösterilen programlama dilinin yanı sıra, yordam oluşturma ve yordamlardaki hataları ayıklama prosedürleri için kullanılan araçları bildiğiniz varsayılır. Microsoft destek mühendisleri belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak işlevsellik sağlamak için bu örnekleri değiştirmez ve belirli gereksinimlerinizi karşılayacak şekilde bu yordamları geliştirmezler.

Ortam değişkenlerini alma

Bir ortam değişkeni almak için Visual Basic içinde $ Environ işlevini aşağıdaki biçimde kullanın:
VALUE = Environ$(NAME)

				
Almak istediğiniz ortam değişkeni adı olduğuna dikkat edin. Değeri değeri döndürülür.

STDIN okuma ve yazma STDOUT

STDIN ve WriteFile işlevi STDOUT yazmak için okumak için Win32 ReadFile işlevini kullanın. Bu işlevler STDIN STDOUT mı bir tanıtıcı vermenizi gerektirir. Tutamaçları STDIN STDOUT ya da almak için GetStdHandle işlevini kullanabilirsiniz. Bu makalede, yumuşatma GetStdHandle işlev işlev çağrıları basitleştirmek için kullanılır. Bu işlevler için bildirimleri aşağıdaki gibidir:
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 işleve geçirilen sabitler aşağıdaki gibi tanımlanır:
Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&
				
Bu işlevlerin her parametre tanımı için MSDN belgelerine bakın. Aşağıdaki örnekte, CGI ortam değişkenleri tam listesi sabit hale gelir. Ctrl-J. üzerinde birlikte tüm sabitler bu listeler Bu da programlama hataları Derleyici ve IntelliSense doğrulama sağlayarak ortadan kaldırır, ancak kendi dizeleri girmesini engelleyen değil.

Örnek kod

Kolaylık olması açısından, hata yakalama (Hello.bas) aşağıdaki örnekte atlanır:
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
				

CGI (Test.htm) test etmek için HTML formu
<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>
				

Basit CGI Hello.exe dosyasını oluşturmak için adımlar:

  1. Yeni bir proje, bir standart .exe projesi oluşturun.
  2. Formu projeden kaldır.
  3. Bir modül projeye ekleyin ve MERHABA adı.
  4. Sub Main ( Proje Özelliklerialtında) Başlangıç nesnesi olarak ayarlayın.
  5. Yukarıdaki Visual Basic kodu kopyalayın ve modüle yapıştırın.
  6. Hello.exe olun.
Notlar:
  • Örnek kod, bir HTTP POST isteği işlemek gösterilmiştir. Bir GET isteğini işlemek için bir CGI uygulaması QUERY_STRING ortamı almak gerekiyor. QUERY_STRING & biçiminde ayrılmış ad/değer çiftlerini içerir "adı Joe & rengi = kırmızı =." URL kodlaması kullanıldığında, tüm boşlukları +için dönüştürülür ve ! gibi tüm özel karakterler ONALTILIK ASCII değerlerine dönüştürülür unutmayın. Diğer bir deyişle, "Merhaba, dünya!" dizesi olarak temsil edilen "Merhaba + Dünya % 21." Visual Basic CGI uygulamalarını ayrıştırma kodunun uygulamak zorunda.
  • CGI uygulaması tarafından hizmet başlatılmış olduğundan, ağ paylaşımlarına erişim mümkün olmayabilir.
  • Sunucu ile iletişim kuran bir hizmet olarak çalışan CGI unutmayın. Bu nedenle, görsel arayüzünün formlar, denetimleri ve ileti kutularını tamamen anlamsız. Gibi bir matter, aslında, bir ileti kutusu, bir CGI uygulamasının yanıt vermemesine neden olur.
  • Varsayılan hata iletisi kutusunda görüntülenmiyor olabilir böylece boyunca bir CGI kodu Visual Basic hata işleme gerçekleştirilmelidir. Günlük hata iletileri sunucuda veya kullanıcının tarayıcısına yazın.
  • Visual Basic'te yazılmış uygulamaların Visual C hata ayıklayıcıları ayıklayabilirsiniz. Bu nedenle, hata ayıklama teknikleri aşağıda başvurulan CGI kullanabilirsiniz. Bir Visual Basic uygulaması Visual C ile hata ayıklamak için yerel koda derlemekseçin ve sonra Simgesel hata ayıklama bilgisi oluşturmak ve Yok iyileştirmeseçin. Tamamlanır ve .exe oluşturulur, Visual Basic'te yazılmış çalışan CGI uygulaması Visual C iliştirebilirsiniz.
  • CGI uygulamasını test etmek için IIS sanal dizine Çalıştırma izinleri kopyalayın.
  • Çalışma zamanı hataları veya iletişim kutuları için Visual Basic kodu CGI uygulamasının yanıt vermemesine neden olabileceğini unutmayın. CGI uygulamasının yanıt vermemeye başlarsa, Visual Studio hata ayıklayıcıda çalıştırılabilir. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    238788 IIS altında çalışan CGI uygulamalarında hata ayıklamak nasıl

Referanslar

RFC 2068, Köprü Metni Aktarım Protokolü
RFC 1738, Tekdüzen Kaynak Konum Belirleyicileri (URL).
238788 IIS altında çalışan CGI uygulamalarında hata ayıklamak nasıl
207671 IIS uygulamaları ağ dosyalara erişme

Özellikler

Makale numarası: 239588 - Last Review: 30 Mayıs 2013 Perşembe - Gözden geçirme: 6.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Internet Information Server 3.0
  • Microsoft Internet Information Services 6.0
Anahtar Kelimeler: 
kbcgi kbinfo kbmt KB239588 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 239588

Geri Bildirim Ver

 

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