03. maj 2005 - 15:32Der er
15 kommentarer og 1 løsning
Dataset med data skal sendes fra webservice?
Jeg har en webservice der selecter i en accessdatabase og lægger det selectede ind i et dataset, derefter skal webservicen sende datasetet til en webservice-consumer. Men når eksekverer programmet og aktivere/invoker webservicen så får jeg denne besked: "System.Data.OleDb.OleDbException: Microsoft Jet-databasemotoren kan ikke åbne filen "C:\Documents and Settings\Administrator\Dokumenter\test.mdb". Den er allerede åbnet med udelt adgang af en anden bruger, eller du skal have tilladelse til at vise dataene."
Hvordan får jeg sendt datasetet med indholdet? Koderne ser således ud:
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Kommentar 1: Hvordan ændre jeg det der med brugernavnet ikke har adgang til MDB-filen... og hvad vil det egentlig sige? :)
Koammentar 2: Da programmet er til en skoleopgave, hvor jeg har formuleret at jeg ville udfører opgaven med en webservice, så skal programmet udføres som en webservice (hver enten det er smart eller ej). Men dataen der skal sendes behøver nødvendigvis ikke at være gemt i et dataset. Det vigtigste er bare at det selectede kommer frem til webservice-consumeren. Det kunne være rart med et kodeforslag, evt. med alternativt forslag? At tilføje er at jeg ikke er specielt skarp til c#.net.
Kommentar 1: Hvis det er tilfældet hvordan tilknytter jeg så et brugernavn til webservicen så den for adgang til MDB?
Kommentar 2: Vil det sige jeg i stedet for at udtrække data til et dataset og sende datasetet til en webservice-consumer skal udtrække data til et array og sende arrayet til en webservice-consumer?
Du betaler en høj pris for at konvertere binær->XML->binær. Fordelen er at formatet er teknologi uafhængigt. Men hvis du bruger en .NET specifik data type, så er der ingen fordel.
Derfor enten web service med generelle data typer eller remoting med .NET specofikke data typer (remotong over TCP sender binære seriliaserede objekter hvilket er meget hurtigere end XML).
using System; using System.Collections; using System.Data; using System.Data.SqlClient; using System.Web.Services;
namespace E { [Serializable] public class Rec { private int f1; private string f2; public Rec() : this(0, "") { } public Rec(int f1, string f2) { this.f1 = f1; this.f2 = f2; } public int F1 { get { return f1; } set { f1 = value; } } public string F2 { get { return f2; } set { f2 = value; } } } public class DataGateway { [WebMethod] public Rec[] GetAll() { SqlConnection con = new SqlConnection("server=ARNEPC3;Integrated Security=SSPI;database=Test"); con.Open(); SqlCommand cmd = new SqlCommand("SELECT F1,F2 FROM T1", con); ArrayList list = new ArrayList(); SqlDataReader rdr = cmd.ExecuteReader(); while(rdr.Read()) { list.Add(new Rec((int)rdr[0], (string)rdr[1])); } rdr.Close(); con.Close(); Rec[] res = (Rec[])list.ToArray(typeof(Rec)); return res; } } }
Og hele pointen med web service er at den kan kaldes fra andre sprog.
Ovenstående test program i Java ser ud som:
import org.tempuri.*;
public class Test { public static void main(String[] args) throws Exception { DataGatewayLocator loc = new DataGatewayLocator(); DataGatewaySoap gate = loc.getDataGatewaySoap(); Rec[] res = gate.getAll().getRec(); for(int i = 0; i < res.length; i++) { System.out.println(res[i].getF1() + " " + res[i].getF2()); } } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.