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

Ö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
Ö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 LongPublic Declare Function stdout Lib "kernel32" Alias "GetStdHandle" _(Optional ByVal Handletype As Long = STD_OUTPUT_HANDLE) As LongPublic 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 LongPublic 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 ExplicitPublic 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 LongPublic Declare Function stdin Lib "kernel32" Alias "GetStdHandle" _(Optional ByVal Handletype As Long = STD_INPUT_HANDLE) As LongPublic Declare Function stdout Lib "kernel32" Alias "GetStdHandle" _(Optional ByVal Handletype As Long = STD_OUTPUT_HANDLE) As LongPublic 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 LongPublic 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 LongSub 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), lBytesWrittenEnd 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
IIS

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 239588 - Son İnceleme: 05/30/2013 09:05:00 - Düzeltme: 6.0

Microsoft Internet Information Server 3.0, Microsoft Internet Information Services 6.0

  • kbcgi kbinfo kbmt KB239588 KbMttr
Geri bildirim