Laden...

Webverweis hinzufügen erzeugt nur asynchrone Vorgänge

Erstellt von InSiDeR vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.195 Views
Thema geschlossen
I
InSiDeR Themenstarter:in
95 Beiträge seit 2011
vor 12 Jahren
Webverweis hinzufügen erzeugt nur asynchrone Vorgänge

Hallo zusammen,
habe einen Webservice geschrieben mit einer Methode, welcher ich einen Computernamen und eine IP Adresse übergebe.

Nach Verarbeitung wirft er mit Strings raus. Klappt auch im Browser wunderbar.

Nun habe ich den Webservice über meinen lokalen IIS erstellt und kann diesen auch darüber aufrufen. Klappt immernoch einwandfrei.

Nun habe ich den Webservice als Webverweis zu meinem Projekt hinzugefügt. Ohne Probleme.

JETZT aber würde ich gerne eine Instanz des Webservices erzeugen und die beiden Parameter der WebMethode übergeben.

WakeOnLAN.PingRequest.Service1SoapClient myPing = new WakeOnLAN.PingRequest.Service1SoapClient();
string picture = myPing.PingRequestAsync(computer, ipAddress);

Die Web Methode heisst: PingRequest
Problem: Ich kann diese Methode nicht aufrufen! Mir gibt er nur "PingRequestAsync" und "PingRequestCompleted" raus. Bei der "...Async" kann ich die beiden Parameter übergeben, erhalte nur leider kein String als Rückgabewert bzw. gar keinen Rückgabewert, da void.

Mein Webservice:

[WebMethod]
        public string PingRequest(string computer, string IPAddress)
        {
             ...
        }

Ich wäre über Hilfe sehr dankbar.

Mit freundlichen Grüßen,
InSiDeR

2.891 Beiträge seit 2004
vor 12 Jahren

In was für ein Projekt hast du den Webverweis eingefügt? Winforms? WPF? Silverlight?
Und für welche .NET-Version wurden die Proxies generiert? Die alten ASP.NET-Webdienst-Proxies oder WCF-ServiceReference-Proxies?

Du kannst dir die Proxyklassen auch selbst (mit erweiterten Einstellungen) generieren lassen. Siehe Web Services Description Language-Tool (Wsdl.exe) (CodeGenerationOptions).

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo InSiDeR,

ich gehe davon aus, dass du den Webverweis einem Silverlight-Projekt hinzugefügt hast (wegen deiner anderen Beiträge) und da gibt es aufgrund [FAQ] Warum blockiert mein GUI? nur die asynchronen Vorgänge. Im Prinzip ändert sich nichts, außer dass im Completed-Event die nötige Information drin steckt.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

I
InSiDeR Themenstarter:in
95 Beiträge seit 2011
vor 12 Jahren

Hallo,
mein Projekt ist ein SilverLight Projekt.

Dort habe ich den Webservice integriert. Habe eine DataGrid mit den Rechnern unserer Firma aufgelistet und möchte abfragen, ob diese eingeschaltet sind etc.

Ich nutze .NET Framework 4.0.

Habe den Webservice über Visual Studio 2010 erstellt über ASP.NET-Webdienstanwendung.

//edit:
@gfoidl: Wie meinst du das im myPing.pingRequestCompleted die nötige Information drin steckt?

Als erstes muss ich ja Parameter senden und anschließend das Ergebnis abfangen. Wie muss ich das nun machen, wenn ich meine entsprechende Methode nicht zur Verfügung habe?

Mit freundlichen Grüßen,
InSiDeR

R
65 Beiträge seit 2011
vor 12 Jahren

War es nicht so, dass dies extra bei Silverlight so ist, damit man den Browser GUI Thread nicht blockiert?

G
538 Beiträge seit 2008
vor 12 Jahren

Hallo Insider,

du benutzt einfach den ServiceClient (bzw. Proxy), und rufst die Asynchrone Methode auf. Vorher abonnierst du das completet event und dort erhälst du in den Event Arguments alle nötigen Informationen.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

I
InSiDeR Themenstarter:in
95 Beiträge seit 2011
vor 12 Jahren

Wie abonniere ich denn das Completet Event bevor ich die Asynchrone Methode aufrufe?

Mit freundlichen Grüßen,
InSiDeR

2.298 Beiträge seit 2010
vor 12 Jahren

So?


myService.MyMethodCompleted += myService_MyMethodCompleted;

Und aufrufen dann so?


myService.myMethodAsync();

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

G
538 Beiträge seit 2008
vor 12 Jahren
// ...
serviceClient.PingCompleted += PingCompleted;
serviceClient.PingAsync();
//...

void PingCompleted(object sender, PingCompletedEventArgs e) {
//...
}

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

I
InSiDeR Themenstarter:in
95 Beiträge seit 2011
vor 12 Jahren
private void PingCompleted(object sender, PingCompletedEventArgs e)
        {
// was soll denn hier rein o.O?
        }

        private void dataGridRechnerListe_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //Eigenschaften ziehen (IP & Computer)
            ComputerEntry myValue = (ComputerEntry) oGrid.SelectedItems[0];
            string ipAddress = myValue.IpAddress.ToString();
            string computer = myValue.Computer.ToString();

            //Verbindung zum Webservice herstellen (Objekt erzeugen)
            WakeOnLAN.pingRequest.Service1SoapClient myPing = new WakeOnLAN.pingRequest.Service1SoapClient();

            //Complete-Event abonnieren
            pingRequest.[COLOR]PingCompleted[/COLOR] += PingCompleted;

            //Methode im Webservice ausführen und Computer + IP übergeben
            myPing.pingRequestAsync(computer, ipAddress);

            //Ergebnis in Variable speichern
            string picture = [COLOR]myPing.pingRequestAsync(computer, ipAddress)[/COLOR];
            
            //Das Ergebnis der Methode mitteilen
            setpic(picture);  
        }

Mit freundlichen Grüßen,
InSiDeR

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo InSiDeR,

die Verwendung von Events zählt zu den Grundlagen die als bekannt vorausgesetzt werden. Siehe [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse) und beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Thema geschlossen