locked
Ergebnis eines Webservice RRS feed

  • Frage

  • Hallo,

    Ich experimentiere gerade mit einem Webserviceder eine Methode

    int Foo()  anbietet.

    und verwende diesen Code:

     

    private void button1_Click(object sender, RoutedEventArgs e)
        {
          myService.TestwsClient service = new myService.TestwsClient();
          
          service.FooCompleted+= new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(fertig);
          service.FooAsync("hallo");
    
        }
    
        private void fertig(object sender, AsyncCompletedEventArgs e)
        {
          //hier Ergebniss abfragen?
        }

     

    Wie komme ich an den Rückgabewert for Foo() ?

    Wie werden Paramater an Foo übergeben (wenn welche nötig wären)?

     

    Gruss jens

    Mittwoch, 9. Juni 2010 05:53

Antworten

  • Hi Jens,
    Deine Methode kann den Rückgabewert über e.Result bekommen, z.B. so:
     

      private void button1_Click(object sender, RoutedEventArgs e)
      {
       myService.TestwsClient service = new myService.TestwsClient();
    
       service.FooCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(fertig);
       service.FooAsync("hallo");
      }
    
      private void fertig(object sender, AsyncCompletedEventArgs e)
      {
       //hier Ergebniss abfragen?
       string res = e.Result;
      }
    

    --
    Viele Gruesse
    Peter

    Mittwoch, 16. Juni 2010 04:24

Alle Antworten

  • Hi Jens,
    wenn du eine SOAP-WebService meinst, dann geht das folgendermaßen:
     
    1. zur Übergabe von Parametern an den WebService ist in der aufzurufenden Web-Methode eine Liste formaler Parameter zu deklarieren, die dann in der Web-Methode genutzt werden können.
    2. in der Web-Methode kann ein Rückgabetyp deklariert werden.
    3. Beim Hinzufügen der WebReference im Projekt wird ein Proxy generiert, der sich aus der WSDL die Informationen zu den einzelnen Web-Methoden holt. Damit sind dann auch Parameter und Rückgabetyp bekannt. Ggf. werden auch für die Typbeschreibung der zu übergebenden Typen im Namensraum des Proxies Klassen generiert.
    4. Beim Aufruf der WebMethode in der Silverlight-Anwendung können die realen Parameterwerte übergeben werden (wie in deinem Codeauszug das "hallo").
    5. Als Typ für den EventHandler ist der vom Proxy generierte Typ einzusetzen.
    6. Im Proxy wird gleichfalls ein von EventArgs abgeleiteter Ereignistyp passend zum Typ des EventHandler bereitgestellt.
    7. In den von EventArgs abgeleiteten Ereignistyp gibt es die Eigenschaft "Result", die den Rückgabetyp liefert.
     
    In VB kann das so aussehen:
     
    Imports System.ComponentModel
    Imports System.Collections.ObjectModel
    Imports System.Windows.Data
    Imports System.ServiceModel
     
    Namespace ViewModelTermine
     
     Public Class Termine
     
     Public Sub New()
      DataLoad()
     End Sub
     
    #Region " Properties"
     
     Public Property Termine() As ObservableCollection(Of verein.TerminRow)
     
     Private cv As ICollectionView
     
     Public ReadOnly Property TerminView() As ICollectionView
      Get
      With New CollectionViewSource
       ..Source = Me.Termine
       '.SortDescriptions.Add(New SortDescription("Name", ListSortDirection.Ascending))
       cv = .View
       'cv.SortDescriptions.Add(New SortDescription("Sort", ListSortDirection.Ascending))
       Return cv
      End With
      End Get
     End Property
     
    #End Region
     
    #Region " WebService"
     
     Private WithEvents ws As verein.wsvereinSoapClient
     
     Private Sub DataLoad()
      ws.DataLoadTermineAsync(Now.Year)
     End Sub
     
     Private Sub ws_DataLoadTermineCompleted(ByVal sender As Object, ByVal e As verein.DataLoadTermineCompletedEventArgs) Handles ws.DataLoadTermineCompleted
      Me.Termine.Clear()
      For Each r1 In e.Result
      Me.Termine.Add(r1)
      Next
     End Sub
     
    #End Region
     
     End Class
     
    End Namespace
     

    --
    Viele Gruesse
     
    Peter
    Mittwoch, 9. Juni 2010 06:40
  • Hi Jens,
    Deine Methode kann den Rückgabewert über e.Result bekommen, z.B. so:
     

      private void button1_Click(object sender, RoutedEventArgs e)
      {
       myService.TestwsClient service = new myService.TestwsClient();
    
       service.FooCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(fertig);
       service.FooAsync("hallo");
      }
    
      private void fertig(object sender, AsyncCompletedEventArgs e)
      {
       //hier Ergebniss abfragen?
       string res = e.Result;
      }
    

    --
    Viele Gruesse
    Peter

    Mittwoch, 16. Juni 2010 04:24