Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Webverweis hinzufügen erzeugt nur asynchrone Vorgänge
InSiDeR
myCSharp.de - Member



Dabei seit:
Beiträge: 101
Herkunft: Dortmund

Themenstarter:

Webverweis hinzufügen erzeugt nur asynchrone Vorgänge

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von InSiDeR am .
Mit freundlichen Grüßen,
InSiDeR
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 3138

beantworten | zitieren | melden

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).
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von dN!3L am .
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7563
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers
InSiDeR
myCSharp.de - Member



Dabei seit:
Beiträge: 101
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von InSiDeR am .
Mit freundlichen Grüßen,
InSiDeR
private Nachricht | Beiträge des Benutzers
RaphaelH
myCSharp.de - Member



Dabei seit:
Beiträge: 66

beantworten | zitieren | melden

War es nicht so, dass dies extra bei Silverlight so ist, damit man den Browser GUI Thread nicht blockiert?
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 550
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
InSiDeR
myCSharp.de - Member



Dabei seit:
Beiträge: 101
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Wie abonniere ich denn das Completet Event bevor ich die Asynchrone Methode aufrufe?
Mit freundlichen Grüßen,
InSiDeR
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

beantworten | zitieren | melden

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 | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 550
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

// ...
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)
private Nachricht | Beiträge des Benutzers
InSiDeR
myCSharp.de - Member



Dabei seit:
Beiträge: 101
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

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);  
        }
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von InSiDeR am .
Mit freundlichen Grüßen,
InSiDeR
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7563
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers