Websservice aus DLL, Umbau Konsolenanwendung als DLL
-
Hallo zusammen,
ich möchte einen Webservice per dll aufrufen.
Der Aufruf aus einer Konsolenanwendung war "relativ" einfach.
Ich habe dieses Tutorial verwendet.Jetzt bekommen ich es aber komplett nicht auf die Reihe, den Service aus einer DLL
aufzurufen. Mir fehlen leider komplett die C# Kenntnisse.Das ist der Code aus der Konsolenanwendung:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using WebService_TestClient.WebReference; namespace WebService_TestClient { class Program { static void Main(string[] args){ Service1 webservice = new Service1(); string srt = webservice.HelloWorld(); Console.WriteLine(srt); int result = webservice.f_webAdd(15, 215); Console.WriteLine("result " + result); bool isValid = webservice.f_verifyNumber(13); Console.WriteLine("isValid " + isValid); } } }
Das funktioniert bestens.
Wenn ich eine Standard-Dll in VS anlege, und den Webservice importiere,
sieht es so aus:using System; using System.Collections.Generic; using System.Linq; using System.Text; using WebService_Test_DLL.WebReference; namespace WebService_Test_DLL{ public class Class1{ Service1 webservice = new Service1(); string srt = webservice.HelloWorld(); int result = webservice.f_webAdd(5, 15); bool isValid = webservice.f_verifyNumber(13); } }
Fehlermeldung :
A field initializer cannot reference the non-static field, method, or property 'WebService_Test_DLL.Class1.webservice
??
Wie gesagt, bin totaler C#-Einsteiger und brauche die DLL nur als Durchlauf zum
Aufruf aus C++.Kennt jemand dazu ein Tutorial?
Alle die ich gefunden habe, verwenden immer nur eine Konsolenanwendung.Vielen Dank schon einmal für eventuelle Hilfe.
mgv
-
SO wie ich das sehe kommt der Fehler nicht aus dem geposteten Code. Sondern es liegt ein Fehler in der Klasse WebService_Test_DLL.Class1.webservice vor.
Deine Aufrufe sollten aus der Assembly genauso wie in einer reinen Konsolenanwendung laufen.
Edit: Arg, ich sehe dein Problem.
Du kommst aus C++? Dann müsstest du wissen was du verkehrt machst!
Sieh dir mal bitte den Code der Konsolenanwendung an und anschließend noch einmal die Assembly.
Wie wäre es denn mit folgendem?
namespace WebService_Test_DLL { public class Class1 { private Service1 webservice = new Service1(); public string HelloWorld() { return webservice.HelloWorld(); } public int f_webAdd(int a, int b) { return webservice.f_webAdd(a, b); } public bool f_verifyNumber(int number) { return webservice.f_verifyNumber(number); } } }
-
Du mußt deinen Code in eine Methode (oder den Konstruktor) packen:
namespace WebService_Test_DLL{ public class Class1{ public Class1() // oder Methode, z.B. void CallWebService() { Service1 webservice = new Service1(); string srt = webservice.HelloWorld(); int result = webservice.f_webAdd(5, 15); bool isValid = webservice.f_verifyNumber(13); } } }
-
Vielen Dank! Es geht! Hätte man auch selber darauf kommen können
Ich habe den Aufruf komplett aus einer Konsolenapplikation mit der DLL hinbekommen.
" Du kommst aus C++?"
Das habe ich nicht gesagt.
Ich komme ganz woanders her. Ist aber eine lange Geschichte.Danke nochmal.
mgv
-
Achte bei deiner Bibliothek aber auf folgenden Umstand:
Was passiert, wenn der Ort an dem der Webservice installiert ist sich ändert?
Die Url, die aufzurufen ist sollte hier von vornherein konfigurierbar sein.