Il metodo in questione consente di automatizzare il download di eventuali file xml o csv in cui vengono salvati i dati inseriti dagli utenti del sito compilando determinati Form presenti sul sito stesso.
Il Webservice consente anche di effettuare il download di eventuali allegati al form
Metodo da richiamare: DownloadForm
Url del Webservice: <url-sito>/SiteMethod/SiteMethod.asmx
Il metodo DownloadForm richiede i seguenti parametri:
La chiave è formata da:
login + separatore + datetime.ticks
La Login deve essere quella dell’utente Wizard di tipo Amministratore o di tipo Utente.
Il separatore da utilizzare è la stringa “#!$”.
DateTime.ticks rappresentano i segni di graduazione della data e dell’ora attuali. Un singolo segno di graduazione rappresenta cento nanosecondi. Questo numero serve per evitare che il metodo del webservice venga richiamato più volte con la stessa chiave.
La chiave deve essere criptata con l’algoritmo Rijndael.
Questo algoritmo dovrà utlizzare come chiave quella indicata sul Wizard alla voce di menù “Sito->Preferenze” nel campo “Chiave WebService” (chiave lunga 32 caratteri: se la lunghezza è inferiore verranno aggiunti degli spazi vuoti) , e come vettore la stringa “Versione PSW 001”.
La procedura può generare i seguenti errori:
Il metodo restituisce l’array di byte del file zip. Se non ci sono iscritti al form, viene restituito null.
Di seguito un esempio del codice scritto in C# per ottenere lo zip di un form.
CHIAMATA AL WEBSERVICE
string separatore = "#!$";
//Chiave indicata sul Wizard di Passweb in "Sito->Preferenze"
string chiaveWebService = "k!3d4tsjk!3d4tsjk!3d4tsjk!3d4tsj";
Crypt crypto = new Crypt(chiaveWebService);
string chiaveCriptata = crypto.Encrypt("login" + separatore + DateTime.Now.Ticks.ToString());
int idForm = 15;
using(SiteMethod proxySiteMethod = new SiteMethod("http://www.sitodemo.passweb.it/SiteMethod/SiteMethod.asmx"))
{
try
{
proxySiteMethod.DownloadForm(chiaveCriptata, idForm);
}
catch (Exception exc)
{
string errore = exc.Message;
}
}
CLASSE CRYPT PER CRIPTARE E DECRIPTARE
public class Crypt
{
private const string vettore = "Versione PSW 001";
private SymmetricAlgorithm algoritmoCriptazione;
/// <summary>
/// Costruttore
/// </summary>
/// <param name="_chiave">chiave webservice</param>
public Crypt(string _chiave)
{
algoritmoCriptazione = new RijndaelManaged();
algoritmoCriptazione.Key = ASCIIEncoding.ASCII.GetBytes(_chiave.PadRight(32, ' '));
algoritmoCriptazione.IV = ASCIIEncoding.ASCII.GetBytes(vettore.PadRight(16, ' '));
}
/// <summary>
/// Metodo che cripta il testo con l'algoritmo RijndaelManaged
/// </summary>
/// <param name="_testo">testo da criptare</param>
/// <returns>testo criptato</returns>
public string Encrypt(string _testo)
{
if (_testo == null || _testo.Length == 0)
return "";
//Conversione stringa in vettore di byte
byte[] bytIn = System.Text.ASCIIEncoding.ASCII.GetBytes(_testo);
//Creazione di uno stream in memoria
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//Creazione stream per la criptazione
CryptoStream cs = new CryptoStream(ms, algoritmoCriptazione.CreateEncryptor(),CryptoStreamMode.Write);
//Scrittura nello stream in memoria del testo criptato
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
//Conversione in base 64 in modo da poter usare la stringa criptata ovunque
return System.Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
/// <summary>
/// Metodo che decripta il testo con l'algoritmo RijndaelManaged
/// </summary>
/// <param name="_testo">testo da decriptare</param>
/// <returns>testo decriptato</returns>
public string Decrypt(string _testo)
{
if (_testo == null || _testo.Length == 0)
return "";
//Conversione della stringa in vettore di byte
byte[] bytIn = System.Convert.FromBase64String(_testo);
//Creazione di uno stream in memoria
System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);
//Creazione stream per la decriptazione
CryptoStream cs = new CryptoStream(ms, algoritmoCriptazione.CreateDecryptor(), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
string ret = sr.ReadToEnd();
sr.Close();
cs.Close();
ms.Close();
return ret;
}
}