VB-Power.net

PictureBox mit Proxy-Server Unterstützung


Klassenmodule
Erstellt am 25 Jan 2009
VB.Net Code-Snippets, Klassen und mehr... >> Klassenmodule

In vielen Mittelständigen- und Großunternehmen wird zur Kommunikation mit dem Web ein Proxy-Server verwendet, über den die Mitarbeiter im Internet surfen. Dabei muss sich der Mitarbeiter an den Proxy-Server durch Benutzername und Passwort authentifizieren. Die Anwendung (wie bspw. der Internet Explorer) muss dabei in der Lage sein, mit einem solchen Proxy-Server kommunizieren zu können.

Wenn Sie eine WebClient Anwendung programmiert haben, in dem das Webbrowser Steuerelement verwendet wird, ist das noch kein Problem. Das Webbrowser Steuerelement erkennt automatisch, aufgrund der Systemeinstellungen, den Proxy-Server und fordert eine Authentifizierung vom Benutzer an.

Verwenden Sie in Ihrer Anwendung eine PictureBox um z.B. Grafiken, Diagramme oder gar Werbebanner aus dem Web abzurufen, so erhalten Sie die Fehlermeldung „Proxy authentification requiered“ vom Proxy-Server zurück. Die PictureBox ist schlichtweg nicht in der Lage, die Grafiken über einen Proxy-Server abzurufen, da sie diese Möglichkeit nicht vorsieht.

Die nachfolgende Komponente „ProxyPictureBox“ schafft Abhilfe. Sie erbt von PictureBox und überschreibt die Eigenschaft „ImageLocation“, wobei weiterhin auch die ursprüngliche Verwendung, also ohne Proxy-Server, möglich ist. Das Abrufen der Daten über den Proxy-Server erfolgt dabei asynchron, so dass die Auslastung Ihrer Anwendung nicht beeinflusst wird.

Hinweis: Wenn Sie die „ProxyPictureBox“ verwenden, müssen Sie erst die Eigenschaften für den Proxy-Server vornehmen, bevor Sie die Eigenschaft „ImageLocation“ setzen.

Imports System.Net
Imports System.Text
Imports System.ComponentModel

''' <summary>
''' PictureBox mit Proxy Server Unterstützung 
''' </summary>
''' <remarks>
''' Die Komponente erbt von PictureBox und erweitert diese umd die Möglichkeit,
''' den Download eines Images aus dem Web über einen Proxy Server zu realisieren.
''' Der Download des Images erfolgt dabei asynchron.
''' </remarks>
Public Class ProxyPictureBox
   Inherits PictureBox

   Private m_UseProxy As Boolean = False
   Private m_UseProxyIESettings As Boolean = False
   Private m_ProxyServer As String
   Private m_ProxyPort As Integer = 8080
   Private m_ProxyUserName As String
   Private m_ProxyPassword As String
   Private m_ImageLocation As String

   Private isInitCompleted As Boolean = False
   Private InitTimer As New Windows.Forms.Timer

   Public Event ProxyError(ByVal sender As Object, ByVal ex As Exception)
   Public Event ProxyDownloadCompleted(ByVal sender As Object, ByVal e As EventArgs)

   Public Sub New()
      AddHandler InitTimer.Tick, AddressOf InitTimerTick
      InitTimer.Interval = 250
      InitTimer.Enabled = True
   End Sub

   Private Sub InitTimerTick(ByVal sender As Object, ByVal e As System.EventArgs)
      isInitCompleted = True
      InitTimer.Enabled = False
      Me.ImageLocation = m_ImageLocation
   End Sub

   ''' <summary>
   ''' Legt den Web-Speicherort fest, aus dem das Image geladen wird.
   ''' </summary>
   ''' <remarks>
   ''' Die überladene Eigenschaft unterstützt den Download des Images über
   ''' einen Proxy Server. Legen Sie zuerst alle Proxy Eigenschaften fest,
   ''' bevor Sie dieser Eigenschaft einen Wert zuweisen. Belassen Sie die
   ''' Eigenschaft "UseProxy" auf False, so wird das Image ohne Proxy 
   ''' angezeigt. (Default)
   ''' </remarks>
   Public Overloads Property ImageLocation() As String
      Get
         Return m_ImageLocation
      End Get
      Set(ByVal value As String)
         m_ImageLocation = value
         If String.IsNullOrEmpty(m_ImageLocation) Then
            Exit Property
         Else
            If isInitCompleted Then
               If m_UseProxy Then
                  Dim dWeb As New WebClient
                  AddHandler dWeb.DownloadDataCompleted, AddressOf dWebDownloadDataCompleted

                  Try
                     If m_UseProxyIESettings Then
                        dWeb.Proxy = Net.WebRequest.GetSystemWebProxy
                     Else
                        dWeb.Proxy = New WebProxy(m_ProxyServer, m_ProxyPort)
                     End If
                     dWeb.Proxy.Credentials = New NetworkCredential(m_ProxyUserName, m_ProxyPassword)
                     dWeb.Encoding = Encoding.Default
                     dWeb.CachePolicy = New System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore)
                     dWeb.DownloadDataAsync(New Uri(m_ImageLocation))
                  Catch ex As Exception
                     RaiseEvent ProxyError(Me, ex)
                  Finally
                     dWeb.Dispose()
                  End Try
               Else
                  MyBase.ImageLocation = m_ImageLocation
               End If
            End If
         End If
      End Set
   End Property

   ''' <summary>
   ''' Delegated Sub, wird aufgerufen wenn der Download über den Proxy Server beendet wurde
   ''' </summary>
   Private Sub dWebDownloadDataCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadDataCompletedEventArgs)
      Try
         If Not e.Cancelled Then
            Dim MS As New IO.MemoryStream(e.Result)
            MyBase.Image = Image.FromStream(MS)
            RaiseEvent ProxyDownloadCompleted(Me, New EventArgs)
         Else
            RaiseEvent ProxyError(Me, New Exception("Download cancelled"))
         End If
      Catch ex As Exception
         RaiseEvent ProxyError(Me, ex)
      End Try
   End Sub

   ''' <summary>
   ''' Bestimmt, ob ein Proxy Server verwendet werden soll.
   ''' </summary>
   <Category("Proxy"), Bindable(True), _
   DefaultValue(GetType(System.Boolean), "False"), _
   Description("Bestimmt, ob ein Proxy Server verwendet werden soll.")> _
   Public Property UseProxy() As Boolean
      Get
         Return m_UseProxy
      End Get
      Set(ByVal value As Boolean)
         m_UseProxy = value
      End Set
   End Property

   ''' <summary>
   ''' Bestimmt, ob die Proxy Einstellungen des Internet Explorers verwendet werden sollen.
   ''' </summary>
   <Category("Proxy"), Bindable(True), _
   DefaultValue(GetType(System.Boolean), "False"), _
   Description("Bestimmt, ob die Proxy Einstellungen des Internet Explorers verwendet werden sollen.")> _
   Public Property UseProxyIESettings() As Boolean
      Get
         Return m_UseProxyIESettings
      End Get
      Set(ByVal value As Boolean)
         m_UseProxyIESettings = value
      End Set
   End Property

   ''' <summary>
   ''' Legt die Adresse für den Proxy Server fest.
   ''' </summary>
   <Category("Proxy"), Bindable(True), _
   Description("Legt die Adresse für den Proxy Server fest.")> _
   Public Property ProxyServer() As String
      Get
         Return m_ProxyServer
      End Get
      Set(ByVal value As String)
         m_ProxyServer = value
      End Set
   End Property

   ''' <summary>
   ''' Legt den Port des Proxy Servers fest.
   ''' </summary>
   <Category("Proxy"), Bindable(True), _
   DefaultValue(GetType(System.Int32), "8080"), _
   Description("Legt den Port des Proxy Servers fest.")> _
   Public Property ProxyPort() As Integer
      Get
         Return m_ProxyPort
      End Get
      Set(ByVal value As Integer)
         m_ProxyPort = value
      End Set
   End Property

   ''' <summary>
   ''' Legt den Benutzernamen des Proxy Servers fest.
   ''' </summary>
   <Category("Proxy"), Bindable(True), _
   Description("Legt den Benutzernamen des Proxy Servers fest.")> _
   Public Property ProxyUserName() As String
      Get
         Return m_ProxyUserName
      End Get
      Set(ByVal value As String)
         m_ProxyUserName = value
      End Set
   End Property

   ''' <summary>
   ''' Legt das Passwort des Proxy Servers fest.
   ''' </summary>
   <Category("Proxy"), Bindable(True), _
   PasswordPropertyText(True), _
   Description("Legt das Passwort des Proxy Servers fest.")> _
   Public Property ProxyPassword() As String
      Get
         Return m_ProxyPassword
      End Get
      Set(ByVal value As String)
         m_ProxyPassword = value
      End Set
   End Property

End Class

Letzte Änderung: 01 Feb 2009 at 09:20

Zurück
TOP Download !!!

DataGridView Control Extender

Erweitern Sie Ihr DataGridView mit 16 zusätzlichen Spaltentypen.


Weiterlesen...


TOP 5 Downloads
Explorer TreeView mit VB.Net - Beispielprojekt2255
DataGridView Control Extender incl. VB2008 Demoprojekt2017
MCIFramework.dll1385
DataGridView Control Extender incl. VB2005 Demoprojekt1183
Settings für das DataGridView - Beispielprojekt991
Powered by:

Powered By VB-Power.net