Web Service e SQL Data

sabato 17 aprile 2004 - 00.22

BrokenLadder Profilo | Newbie

Salve Raga!

Sto cercando di connettere una piccola applicazione flash a un database SQL Server 2000. A tale scopo stavo sperimentando la tanto decantata integrazione di Flash MX 2004 professional con i web services, ma con scarsi risultati. In partica ho realizzato un semplice web service che dovrebbe esprorre in formato xml i risultati di una query su una tabella di sql. Sfruttando le mie non approfondite conoscenze sono riuscito nell'intento, ma solo parzialmente: infatti il web service mi restituisce sì il risultato della query ma me lo restituisce come un dataset, mentre per l'importazione efficace dei dati in Flash avrei bisogno che mi restituisse un Array. Come posso fare per restituire un Array o per popolare un array con il contenuto del dataset??

Brainkiller Profilo | Guru

Ciao allora, effettivamente come ritorno usare un Dataset è molto comodo se poi si utilizza il Web Service da una applicazione .NET.
Se lo consumi invece da una applicazione Java o da altra applicazione che non ha i Dataset è un bel pasticcio.
Io ho risolto così, invece di dare come ritorno della funziona un DataSet do come ritorno un XmlDocument. Il risultato è questo, lo puoi vedere in questo esempio:
http://webservices.dotnethell.it/WSContents.asmx/GetArticles?n=3

Per ottenere ciò ho scritto in C# questa cosa sfruttando SQLXML di Sql Server 2000. Cioè in una query se aggiungi alla fine FOR XML AUTO, SQL Server ti spara fuori tutta la query in XML. Ti posto il codice C#, dovresti riuscire a convertirlo facilmente in VB.NET:

public XmlDocument GetArticles(string n)
{
SqlConnection sqlconn=new SqlConnection(ConnectionString);
sqlconn.Open();
SqlCommand cmd=new SqlCommand("SELECT TOP 3 * FROM ARTICLES ORDER BY CREATEDDATE DESC FOR XML AUTO,ELEMENTS",sqlconn);

SqlDataReader dr=cmd.ExecuteReader();
while (dr.Read())
{
ret+=dr.GetString(0);
}
dr.Close();

ret="<root>" + ret + "</root>";
doc=new XmlDocument();
doc.LoadXml(ret);
sqlconn.Close();

return doc;
}

così facendo non dovresti avere problemi a importare il tutto in Flash MX.
ciao

david

BrokenLadder Profilo | Newbie

Mizzica David!

L'esempio ke mi hai mostrato sembra essere proprio quello ke fa per me! Probabilmente anke il codice suggerito è ottimo, tuttavia...non riesco a metterlo in pratica...Forse sono stato eufemistico riguardo alla mia scarsa dimestikezza con la programmazione....Quindi - nella sperana ke non vi rotoliate tutti quanti in terra dalle risa - posto il codice utilizzato per questo piccolo web service: non ho tradotto il tuo codice in VB (non sarei stato in grado) ma ho tentato di completarco in C#. Ecco qua il risultato dell'esperimento:

<%@ WebService Language="C#" class="MyNewsService" %>

using System.Web.Services ;

public class MyNewsService
{
[WebMethod()]
public XmlDocument GetArticles(string n);
{
SqlConnection sqlconn=new SqlConnection("Server=*****;UID=*****;PWD=*****;Database=****");
sqlconn.Open();
SqlCommand cmd=new SqlCommand("SELECT * FROM NEWS ORDER BY DATE DESC FOR XML AUTO,ELEMENTS",sqlconn);

SqlDataReader dr=cmd.ExecuteReader();
while (dr.Read())
{
ret+=dr.GetString(0);
}
dr.Close();

ret="<root>" + ret + "</root>";
doc=new XmlDocument();
doc.LoadXml(ret);
sqlconn.Close();

return doc;
}
}

Deve mancare un sacco di roba, perché ottengo immancabilmente degli errori di compilazione o peggio....Grazie per l'aiuto!

Brainkiller Profilo | Guru

Errori di compilazione oppure a runtime ?
Perchè il codice che ti ho incollato l'ho presa da un'applicazione funzionante.
Inoltre, io ti ho incollato una query SELECT * FROM NEWS valida sulla mia base dati, magari questa tabella non ce l'hai nel tuo DB e devi sostituirla.

saluti
david

BrokenLadder Profilo | Newbie

Nossignore. Errori di compilazione. Oviamente ho sostituito la tua query con i dati relativi alla tabella del mio DB, e ho inserito i dati per la connessiona al mio DB nella stringa di connessione, ma niente....

BrokenLadder Profilo | Newbie

Dimenticavo...dai un'okkiata al codice ke ho quotato nel mio messaggio del 18 aprile, se puoi e se ti va, ovviamente.....

Grazie

Brainkiller Profilo | Guru

Quali sono gli errori di compilazione e su che righe ?

Il codice che hai quotato mi sembra perfettamente uguale a quello che ti ho postato io :)

Stai usando Visual Studio .NET per creare il Web Service ?

ciao
david

BrokenLadder Profilo | Newbie

Purtroppo non ho potuto usare visual studio per scrivere il webservice. Su qualsiasi computer vado a installarlo l'installazione si blocca al secondo cd: errore 2337, mi pare....boh

Cmq, il compilatore mi restituisce un errore alla linea 9, con il seguente messaggio:

CS1519: Token non valido '{' nella dichiarazione del membro della classe, della struttura o dell'interfaccia.

Cavolo...

Brainkiller Profilo | Guru

Forse è per questo, scrivere a mano la struttura di un Web Service non è così facile come con Visual Studio .NET. Anche in compilazione poi è necessario referenziare tutti gli assemblies necessari.
Perchè non provi ad usare Web Matrix ?
http://www.dotnethell.it/news/nw.aspx?NewsID=39

Per l'errore 2337 di Visual Studio prov a guardare qui:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=36

ciao
david

BrokenLadder Profilo | Newbie

Allora....

C'è un'evoluzione: utilizzando webMatrix e visualizzando un esempio di Web Service scritto in C# ho leggermente corretto il codice e adesso ho un'altra gatta da pelare che, ovviamente, a naso mi pare più rognosa...Ho un nuovo errore di compilazione:

CS0246: Impossibile trovare il tipo o il nome dello spazio dei nomi 'XmlDocument'. Probabilmente manca una direttiva using o un riferimento a un assembly

Devo dire che ho una grossa difficoltà a orientarmi nella faccenda...Sai se online o in libreria si possono trovare dei materiali di base che mi possano introdurre ai concetti e alla teminologia di .net e C# ? Ho trovato diverso materiale, ma mi sembra che parta sempre un passo avanti a me e a me sfugge il quadro d'insieme...Mi sono munito anche di ponderoso manualone su ASP .net, purtroppo scoprendo solo dopo che il linguaggio utilizzato era VB e non C# e che la trattazione era piuttosto 'rapsodica', senza guidare il lettore attraverso i concetti e le tecniche di base. Sono molto incuriosito dalla piattaforma ma ho una grossa difficoltà ad affrontarla kakkio...

Ah! Dimenticavo di dirti ke sul server ho fatto tutti gli aggiornamenti e mi pare di poter dire ke anke il .net framework sia la versione più aggiornata. CMQ come si fa a stabilire la versione installata sulla makkina??

BrokenLadder Profilo | Newbie

Ah Ah!!

Nuove evoluzioni...Ho aggiunto alcune direttive System.Xml e System.Data e ho fatto alcuni passi avanti...Adesso ho un nuovo errore di compilazione:

CS0103: Il nome "ret" non esiste nella classe o nello spazio dei nomi "MyNewsService".

ke corrisponde alla linea

ret+=dr.GetString(0);

Hmmm... questa 'ret' è una variabile? forse andava dikiarata?

Brainkiller Profilo | Guru

Esatto forse manca perchè l'ho dichiarato a livello globale, comunque dovrebbe essere una stringa.
Prova a dichiararla come string.

Altri consigli su .NET, invece che prendere un manuale su ASP.NET, prenditi un bel libro che introduca sui concetti legati al .NET Framework oppure leggiti il .NET Framework SDK che offre tanta documentazione di qualità che ti permette di capire tante cose. Certo non ti basterà leggere un paio di pagine...c'è molto da leggere e studiare all'inizio poi quando hai una buona base, corri con un passo più spedito.

ciao
david

BrokenLadder Profilo | Newbie

Allora....

Sono quasi esausto...un paio di orette in libreria pare mi abbiano fruttato alcuni testi utili ad orientarmi un po'. Nel frattempo...un'altro piccolo progresso: fine degli errori di compilazione. Adesso accedendo il file asmx posso cliccare sul link GetArticles e rikiamare la funzione. Il problema sore dopo: quando invoco il web service ottengo un bell'errore dell'applicazione, anzi, un errore del server non meglio specificato.

se poi mi collego al file newsservice.asmx/GetArticles?n=3 allora il patatrac si articola come segue:

Formato della richiesta non riconosciuto.
Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.

Dettagli eccezione: System.InvalidOperationException: Formato della richiesta non riconosciuto.

Errore nel codice sorgente:

Durante l'esecuzione della richiesta Web corrente è stata generata un'eccezione non gestita. Per informazioni sull'origine e la posizione dell'eccezione, vedere l'analisi dello stack dell'eccezione riportata di seguito.

Analisi dello stack:


[InvalidOperationException: Formato della richiesta non riconosciuto.]
System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +388
System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +94
System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, String path, String pathTranslated, Boolean useAppConfig) +699
System.Web.MapHandlerExecutionStep.System.Web.HttpApplication+IExecutionStep.Execute() +95
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +173




--------------------------------------------------------------------------------
Informazioni di versione: Versione di Microsoft .NET Framework:1.1.4322.573; Versione di ASP.NET:1.1.4322.573



Adesso sono entrato in tigna con la cosa...ma cmq volevo chiederti se posso contattarti privatamente per discutere di una collaborazione commerciale (quindi non gratis et amore dei) a uno o due progetti interessanti a cui sto lavorando. Fammi sapere la tua disponibilità....

Ciao e grazie

Brainkiller Profilo | Guru

Lascia un messaggio nell'area dell'assistenza tecnica con gli estremi per contattarti, non so e-mail oppure ICQ o MSN:
http://www.dotnethell.it/PostComment.aspx

ciao
david

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5