Announcement

Collapse
No announcement yet.

Andwendung ausgelastet bei Webservice

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Andwendung ausgelastet bei Webservice

    Hallo,

    ich habe ein Programm in VB.NET und wenn ich über meinen Webservice Daten empfange
    dauert dies eine ganz Weile und während dessen ist die Anwendung ausgelasten.

    Leider kann man hier ja nicht mit DoEvents() oder ähnlichem arbeiten.
    Hat jemand eine Idee wie man verhindern kann das die Anwendung so ausgelastet ist ?

    MfG Hans

  • #2
    Hallo

    wenn ein Client damit rechnen muss, dass ein aufgerufener Web Service ländere Zeit "hängen bleibt" und somit seine Benutzeroberfläche im primären Thread blockiert, gibt es verschiedene Möglicheiten, um diesem Problem aus dem Weg zu gehen:

    1. Der Client spaltet in eigener Regie einen separaten Thread ab und ruft von dort aus den Web Service aus. Wenn der Vorgang zu lange dauert, kann der primäre Thread die Abort-Methode der Proxy-Klasse aufrufen.

    2. Der Client kann die Eigenschaft <b>Timeout</b> der Proxy-Klasse auf einen maximal erträglichen Wert setzen, um im Fall des Hängenbleibens einen Notausstieg automatisch wirksam werden zu lassen.

    3. Der Web Service kennzeichnet die Methode als <b>SoapDocumentMethode(OneWay:=True)</b>. Allerdings darf diese Methode keinen Rückgabewert oder ByRef-Argumente verwenden.

    4. Der Client kann den Web Service asynchron aufrufen.

    Aber auch dann, wenn der Client sich für den 4. Weg (asynchronen Aufruf) entschieden hat, stehen verschiedene Optionen zur Verfügung:

    a) Der Client ruft BeginXYZ und EndXYZ auf, wobei der Aufruf von EndXYZ solange "hängenbleibt", bis der Web Service auch tatsächlich fertig ist. Die Proxy-Klasse hat automatisch auch die mit Begin und End anfangenden Methoden für den asynchronen Aufruf implementiert.

    b) Der Client nutzt einen <b>AsyncCallback</b>-Delegate, um sich via Callback über das Ende des Web Services informieren zu lassen.

    c) Der Client nutzt die <b>IAsyncResult</b>-Methode <b>IsCompleted</b>, um zu prüfen, ob die EndXYZ ohne Verzögerung aufgerufen werden kann.

    Das folgende Beispiel demonstriert einen dieser Fälle:
    <pre>
    Private Sub OSCreditCardCheckResult(ByVal iAR As IAsyncResult)
    Dim sTxt As String
    sTxt = (iAR.AsyncState).EndOSCreditCardCheck(iAR)
    LogAction("Ergebnis: " & sTxt)
    End Sub
    <br>
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    LogAction("Instanz vom Web Service angefordert")
    Dim aWS As New localhost.ServiceAsync()
    Dim sTxt As String
    LogAction("Methode OSCreditCardCheck wird aufgerufen...")
    Dim aCB As System.AsyncCallback = AddressOf OSCreditCardCheckResult
    Dim iAR As IAsyncResult
    iAR = aWS.BeginOSCreditCardCheck("333", aCB, aWS)
    LogAction("...Methodeaufruf BeginOSCreditCardCheck fertig.")
    StatusBar1.Text = "Fertig."
    End Sub
    </pre&gt

    Comment


    • #3
      Danke für die promte Antwort

      Comment

      Working...
      X