tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
633
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    luigied luigied ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    77
    Hi,

    habe mal wieder ein kleines Problem.

    Und zwar habe ich folgende Bibliothek erstellt:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Public Class UDPSender
     
        <Microsoft.SqlServer.Server.SqlProcedure()> _
        Public Shared Sub sendUDP(ByVal IP As Long, ByVal Port As Integer, ByVal Data As String)
            Dim SenderSo As UdpClient
            Dim EP As IPEndPoint
            SenderSo = New UdpClient(9845)
            EP = New IPEndPoint(IP, Port)
            Dim Bytes(1024) As Byte
            Bytes = Text.Encoding.ASCII.GetBytes(Data)
            SenderSo.Send(Bytes, Bytes.Length, EP)
        End Sub
    End Class

    Diese soll als CLR-Prozedur in SQL-Server eingebunden werden. Das klappt auch soweit.
    Nur beim Ausführen erhalte ich vom SQLServer folgende Fehlermeldung:

    A .NET Framework error occurred during execution of user-defined routine or aggregate "CallHome":
    System.Security.SecurityException: Fehler bei der Anforderung des Berechtigungstyps "System.Net.SocketPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
    System.Security.SecurityException:
    bei System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
    bei System.Security.CodeAccessPermission.Demand()
    bei System.Net.Sockets.Socket.Bind(EndPoint localEP)
    bei UDPSender.sendUDP(Int64 IP, Int32 Port, String Data)
    Weiss jemand, was ich da falsch mache?

    mfg LuigiEd
     

  2. #2
    luigied luigied ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    77
    ok. hier die lösung:

    statt
    Code :
    1
    
    SenderSo = New UdpClient(9845)

    einfach den parameterlosen Konstruktor nutzen:

    Code :
    1
    
    SenderSo = New UdpClient()

    Hintergrund ist, dass sich die Routine sonst an den angegebenen Port bindet und diesen bis zum Senden blockiert.

    Hier schmeißt? ... schmeisst**** ... WIRFT SQL-Server (oder das .NET-Framework) die SocketPermissionException, weil der SQL-Server nicht die berechtigung dazu hat.

    Wäre auch fatal, wenn das ginge. Würde die Prozedur vom DB-Server ein 2. Mal aufgerufen, während der 1. Aufruf noch nicht terminiert ist, würde es krachen, weil der 1. Aufruf den Port noch belegt.
     

  3. #3
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    .NET ist nicht VB6. Ich habs verschoben.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 23.11.09, 12:27
  2. Antworten: 6
    Letzter Beitrag: 12.06.07, 18:28
  3. [help] Fehler auf Site - kann den Fehler nicht finden...
    Von Nice99 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 10.08.06, 22:30
  4. Antworten: 1
    Letzter Beitrag: 10.08.06, 21:31
  5. Antworten: 5
    Letzter Beitrag: 06.05.02, 11:54