2017-02-17 4 views
0

Ich bin ein Neuling in Java und C#, also bitte bitte mit mir.DataSet im Java Web Service Client von C# Web Service

Ich habe einen Webdienst in C# mit dem .Net Framework, das mit einer Tabelle in meiner MSSQL Server-Datenbank verbunden ist. Ich habe eine Java-Anwendung in Eclipse mit einem Web-Service-Client erstellt, der in Visual Studio über einen SoapProxy über localhost mit dem Web-Service verbunden ist.

Das Problem ist, dass die Webmethode, die ich in C# gemacht habe, die Bibliothekstabelle von MSSQL als ein DataSet zurückgibt, die ich keine Ahnung habe, wie man eine Methode nennt und in der Konsole meines Java Clients druckt.

Gibt es einen besseren Weg über die Webmethode, um meine Tabelle von MSSQL nach VisualStudio zu bekommen und dann in meiner Eclipse Console zu drucken?

Java Web Service Client http://imgur.com/a/oCGzy

C# Web Service

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 
public class WSDB : System.Web.Services.WebService 
{ 

    [WebMethod] 
    public string HelloWorld() 
    { 
     return "Hello World"; 
    } 

    [WebMethod] 
    public DataSet getBooks() 
    { 
     SqlConnection con = new SqlConnection(); 
     con.ConnectionString = "server=.;database=Library;user=sa;password=1234"; 
     SqlDataAdapter da = new SqlDataAdapter("select * from Library", con); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     return ds; 



    } 

} 

Was in meinem Java-Web-Service-Client der Code sollte so aussehen DataSet in der Konsole aufrufen und drucken die einfachste einfachste Art und Weise? (Formatierung muss nicht schön sein)

aktualisiert

habe ich versucht, einen anderen Ansatz mit einem neuen WebMethod, eine Verbindung zu meiner Datenbank mit ADO.Net Entity Framework.

Aber ich bin immer noch ratlos, wie die Methode in meinem Java Web Client aufzurufen und zu drucken, irgendwelche Vorschläge?

[WebMethod] 
    public Library GetLibInfo(string booknr) 
    { 
     return libEnt.Libraries.Single(x=> x.booknr == booknr); 
    } 

Antwort

0

Ich bin kein # Programmierer c, aber von dem, was ich über Datensatz lesen Ich sehe, dass eine Stateful-Objekt ist, sollten Sie nur serializable Objekte aus einem WS zurückzukehren.

Also setzen Sie Ihr Ergebnis in ein einfaches Array und geben Sie das zurück.

Auf jeden Fall sollten Sie some wie folgt aufrufen:

Sie so etwas wie dieses haben sollte:

WSDBLocator service = new WSDBLocator(); 

GetBooksReponseGetBookResults res = service.getGetBooks(); 

SomeKindOfCollection col = res.someMethod(); 
for(SomeKindOfObject o : col){ 
    System.out.print(o.getProperty1()); 
    System.out.print(","); 
    System.out.print(o.getProperty2()); 
    System.out.print(","); 
    System.out.printLn(o.getProperty3()); 
} 
+0

Danke für den Input, aber ich bin Codierung dies als Teil eines Projekts, in der Schule und ich verwende diesen Webmethod für 4 andere Clients, die es einen Schmerz im Arsch macht nun die Webmethod zu ändern, dass ich den letzten Kunden dafür machen. Von dem, was ich gelesen habe, sollte es möglich sein, ein Dataset in ein String-Array zu konvertieren und dann das Array in der Java-Konsole zu drucken, aber ich bin mir nicht sicher, es genau zu tun. Auch einige Code-Beispiele wären sowohl für Java als auch für C# großartig, da ich wirklich ein Anfänger bin und seit einigen Stunden in diesem letzten Teil feststecke. – Arkad

0

Wenn Formatierung kein Problem ist, können Sie nur die Daten von Ihrem Datatable in ein Objekt-Array importieren und gib es zurück.

[WebMethod] 
    public object[] javaCustomer() 
    { 
     connectCronus(); //changes the ConnectionString 
     int count = 0; 
     cmd = new SqlCommand("select [Name],[City] from [CRONUS Sverige AB$Customer];"); 
     dt = returnDataTable(); 
     object[] ar = new string[dt.Rows.Count]; 
     foreach (DataRow row in dt.Rows) 
     { 
      ar[count] = row["Name"].ToString() + "\t" + row["City"].ToString(); 
      count++; 
     } 
     return ar; 
    } 

Dann ist es nur eine Frage des Drucks in Ihrem Java-Client.

for(Object o : proxy.javaEmployee()){ 
     System.out.println(o); 
}