Newsgroup: it.comp.lang.visual-basic
Titolo: ASP e XML

Ciao,
apro un nuovo 3ad perche' piano piano sto facendomi delle idee, sempre
confuse, ma che si chiarificano un po'.
Rispiego la necessita', andando avanti un passo alla volta..
Una societa' di servizi, mandera' tramite un metodo "post", una serie di
"file" XML, via HTTP, ad un URL da me indicato, che puntera' ad una pagina
ASP.
Andando a cercare informazioni su ASP, ho trovato che il modo in cui la
mia ASP puo' "leggere" cio' che gli viene mandato , e' utilizzare la
collection Forms. Immagino pero' che questo sia possibile nel momento in
cui il metodo "Post" venga lanciato all'interno della pagina ASP stessa.
Eccoci alla domanda... come andare a leggere questi file che mi vengono
sparati?
Grazie... Maurizio  
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Mi sta venedno un'idea:
nella mia pagina ASP, creo un form con un campo testo, che si chiama
"testoricevuto".
Indicando l'URL alla societa' che deve mandarmi il testo, indicherei, ad
esempio 
www.miourl.it/paginaasp.asp?testoricevuto=
e loro devono solo appendere il testo XML
potrebbe funzionare?


 sparati?
A parte l'OT che cominci a percorrere, io pianterei quest'accoppiata 
ASP-XML.
Per me ti conviene studiarti per 10 minuti i WebServices in .Net, ti fai il 
webservice lato provider e il client lato PC con un VB2005Express.
Scambi i dati in modo decisamente più semplice, a quest'ora già lo avresti 
fatto :)
Sul PC il programma .Net lo tieni anche in secondo piano e lo gestisci via 
app in VB6.
Ciao 

 webservice lato provider e il client lato PC con un VB2005Express.
...
Il problema e' che la societa' che mi manda i messaggi, me li manda
proprio in XML


 proprio in XML
Qui mi perdo.
Ma tu l'XML lo devi interpretare o lo devi mandare sul sito?
Lo devi mandare su come testo o come file?
Ciao 

 Lo devi mandare su come testo o come file?
...
Allor, da quel che mi dicono (sto ricevendo documenti piano piano), i
signori mi scrivono questo:
Le informazioni rese disponibili su http post sono aggregate in un XML 
quindi, da quel che capisco, saranno loro a mandarmi un testo in XML,
tramite metodo Post di HTTP.
Una volta intercettato cosa mi mandano, potrei mettere tutto il testo in
una variabile, e andare a spulciarmi la parte di testo che mi interessa
(senza scomodare per ora parser di XML e roba simile... intanto mi serve
qualche cosa che bene o male funzioni, poi faccio sempre in tempo a
migliorare il tutto e soprattutto a studiare cose nuove).
A quel punto, non dovrebbe essere difficile aggiornare un database, che
per altro gia' riesco a leggere (o meglio, a visualizzare un record)
tramite asp.


 tramite asp.
Eheh, io non capisco un tubo :)
'sto xml quindi sta su un loro sito? Ma il famoso sito aruba č tuo o č il 
loro?
E tutto il resto che č?
Dovresi fare un bel diagrammino :)
SitoWeb cliente ---> download file xml ---> PC client ---> fa qualche cosa 
su un DB ---> 'ndo stą 'sto DB? ---> e poi?
Ciao

 Eheh, io non capisco un tubo :)
...
Oh, meno male, non sono il solo.
Allora, loro hanno una applicazione che posta il testo XML ad un URL che
dobbiamo indicare noi.
Questo URL sara' l'indirizzo della mia pagina ASP (che girera'
probabilmente su Aruba) che dovra' leggere il testo (mandato con il metodo
Post di HTTP, quindi non e' un file), elaborarlo, estarre i dati che
servono, e con quei dati, riempire un database access presente sempre sul
famoso sito Aruba.
Poi verranno fatte anche altre cose, ma gia' iniziare da qui non sarebbe
male :-)


 male :-)
Prima di tutto sarebbe bello sapere cosa cavolo va fatto e come.
Io mi farei implementare da loro un esempio del famoso posting dell'xml, 
voglio vedere le loro intenzioni, sennň qui non se ne esce piů.
Ciao 

 
La pagina ASP dovrà instanziare un oggetto XML document che caricherà
lo stream di caratteri ricevuti dal POST servendosi dell'oggetto
Request. Qualcosa del tipo:
Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.4.0")
  .....
objXMLDoc.load Request
poi ci farai quello che devi fare. 
Presumibilmente, ti farai fornire anche lo schema (XMD) che
utilizzerai per validare i dati in arrivo.
Di esempi in giro ce ne sono a bizzeffe.
Ciao

 voglio vedere le loro intenzioni, sennò qui non se ne esce più.
...
Un esempio ce l'ho, e per fortuna non e' complicatissimo.
e' fato cosi'
<?xml version="1.0" encoding="ISO-8859-1"?>
<MESSAGES SIZE="nMsg">
<MESSAGGIO NUM="1">
<CUSTOM>
<GESTORE>…</GESTORE>
<NUMERO1>...</NUMERO1>
<NUMERO2>...</NUMERO2>
<TESTO>...</TESTO>
</CUSTOM>
<TIMESTAMP>yyyyMMddHHmmssSSS</TIMESTAMP>
</MESSAGGIO>
a me, di tutto questo, serve estrarre il testo tra <TESTO> e </TESTO> ed
aggiungerlo ad un database.


 Di esempi in giro ce ne sono a bizzeffe.
...
Grazie per lo spunto, vedo di tirare fuori qualche cosa


 Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.4.0")
...
Ecco la prima difficolta'
all'istruzione di cui sopra, la mia pagina ASP mi risponde:
error ASP 0177: 800401f3
Server.CreateObject Failed
Invalid class string
ok, dico.. probabilmente il server su cui gira il tutto non ha queste dll,
la prendo dal mio sistema e la copio (sono dll pure, non vanno registrate,
giusto?)
Prendo il mio client FTP, copio la MSXML2.dll sulla cartella dove c'e' la
paginetta ASP, ma l'errore rimane.
Che fo?


 Che fo?
Indovina indovinello :)
Ciao 

 Indovina indovinello :)
...
Si si, prendi per il (_I_) tu!
Ho capito che mi vuoi far fare una WebApplication con .NET, ma ancora di
net non ci capisco davvero niente (e la cosa e' drammatica... dopo
capitoli e capitoli del Programmare VB.Net di Balena, piu' andavo avanti e
piu' mi confondevo le idee).


Che fo?
In aggiunta a quanto ti ha gią detto Fabio, devi considerare che ogni
fornitore di hosting decide cosa puņ essere istanziato sui loro
server, in quale versione e in quale modo. 
Il modo migliore č spulciare la loro KB, chiedere al loro forum o
direttamente all'assistenza.
Ciao

 e poi, una proprieta' di default non e' stata trovata per l'oggetto.
Qui non so di cosa stai parlando.
Ho fatto 2 prove.
1) su aruba ho verificato che hanno le stesse versioni che ho io: 2.6, 3.0, 
4.0, 6.0 e si instanziano.
2) solitamente quando ti permettono un CreateObject su una classe senza 
indicare la versione viene instanziata l'ultima installata.
Questo non dipende dalla CreateObject, ma dalla versione a cui si riferisce 
il nome della classe nel registro, prova ad es. a cercare MSXML2.DOMDocument 
nel regedit.
Però adesso che guardo nell'incomprensibile registro sembra che se non 
indico la versione mi va sulla 3.0.
Guarda HKEY_CLASSES_ROOT\Msxml2.DOMDocument\CurVer
Ciao

 direttamente all'assistenza.
...
Ok, quindi devo come prima cosa chiedere di che tipo di parser XML
dispongono, giusto?
In base a cio' che mi dicono, mi muovo a cercare di capire come avere le
mie stringhe.
Tornando a qualche post fa, mi dicevi di utilizzare il metodo Request per
avere come ritorno, il testo che e' stato mandato tramite il metodo Post
di HTTP.
Escludendo per un attimo il testo XML, e prendendo un testo qualunque,
assgnando ad una variabile il risultato di Request, viene restituito un
errore.
Per mandare una richiesta ad una ASP, utilizzo inet
Inet1.Protocol = icHTTP
Inet.OpenUrl "
http://www.miodominio.it/pagina.asp?testo
che cosa sbaglio (perche' sbaglio, lo so che sbaglio)


 Qui non so di cosa stai parlando.
...
Dunque, non so se dire questa cosa o no... ma d'altra parte, se anche tiri
frutta e verdura addosso allo schermo, a me non arrivano :-)
Quando parlavo di FTP pensavo fosse chiaro che non sto facendo le prove
sul mio pc, ma su uno spazio web che abbiamo su un provider.
Anche se... e qui viene il simpatico, mi dicono ora che non e' Aruba
(anche se ci dovremmo passare per i primi di settembre e che molto
probabilmente questa pagina ASP e il relativo database andranno su Aruba
nei prossimi 15 giorni).
Gia' non ci capisco un cavolo... mi fanno fare pure le prove cosi' a
cavolo. Boh


che cosa sbaglio (perche' sbaglio, lo so che sbaglio)
Con Inet (mai usato) credo si faccia così:
Inet1.Execute("
www.miosito.com
", "POST", "MiaVariabile=MioTesto")
Nella pagina ASP:
Dim MiaVariabile
MiaVariabile = Request.Form("MiaVariabile")
Non capisco però il senso di quest'ulteriore richiesta.
A questo punto credo che stiamo facendo un gran minestrone,
oltre che a spingersi ai limiti dell'OT.
Ti consiglio di fermarti un attimo a riflettere e ad acquisire tutte
le informazioni necessarie.
Ciao

 oltre che a spingersi ai limiti dell'OT.
...
No, mica vero per quel che riguarda l'OT... che ce l'ho messo a fare
l'Inet e VB6? Solo per rimanere IT :-)


...
OK. Tagliamo la testa al TOPO. 
Non ci ho capito una mazza se sei tu a dover spedire i dati o quegli
altri. 
Anyway....
Avevo un momento di tempo e ho fatto questa prova su Aruba.
Prendila come base per trafficarci con le tue cose.
In VB: 
a) Trova sul tuo PC un file XML qualsiasi (non tanto grande)
b) Valorizza le costanti
'// CODE
Option Explicit
Private oXMLHTTP As MSXML2.XMLHTTP40
Private oXMLDoc As MSXML2.DOMDocument40
Private Const Path As String = "C:\Temp\MioFile.xml"
Private Const Url As String = "
http://www.miosito.com/ProvaXml.asp
"
Private Sub Command1_Click()
Set oXMLHTTP = New MSXML2.XMLHTTP40
Set oXMLDoc = New MSXML2.DOMDocument40
oXMLDoc.Load Path
With oXMLHTTP
   .open "POST", Url
   .send oXMLDoc
   MsgBox .responseText, , "Risposta dal sito"
End With
Set oXMLHTTP = Nothing
Set oXMLDoc = Nothing
End Sub
'// END CODE
Pagina ASP:
'// CODE
<% Language=VBScript %>
<%
Response.ContentType = "text/xml"
Dim objXMLDoc
Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument")
If objXMLDoc.load(Request) Then
       'qui ci fai i tuoi spippolamenti
      Response.Write "File ricevuto correttamente!" & vbcrlf & vbcrlf
      Response.Write objXMLDoc.text
Else
      Response.Write "Error: " & Err.Description
End If		
 
%>
'// END CODE
Il tutto MOOLTO maccheronicamente....
Ciao

 Prendila come base per trafficarci con le tue cose.
...
Ok, mi passi le coordinate bancarie a cui mandare il bonifico? :-)
Sembra funzionare tutto (devo ancora provare la scrittura sul database, ma
non ho ancora i permessi).
Inosmma, a parte il fatto che ci ho messo un paio d'ore a capire che per
trovare gli elementi dei nodi, il GetElementsByTagName e' Case Sensitive
(sigh!!), per ora sta andando tutto bene!
Grazie ancora... Maurizio
