Risultati ricerca
Indice
Frase completa
Cerca nella pagina
Chiudi
Indice

DOWNLOAD DATI FORM

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:

  • chiave: chiave criptata contenente la login di un utente del Wizard (sia di tipologia Amministratore che di tipologia Utente)
  • idForm: identificativo del form (reperibile dal Wizard alla voce di menù Utenti->Gestione Forms)

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:

  • Funzionalità non disponibile: se il contratto non prevede chiamate al webservice
  • Chiave ripetuta: se il webservice è stato richiamato più volte con la stessa chiave
  • Chiave errata: se i dati contenuti nella chiave non sono del numero voluto o se le credenziali contenute sono errate
  • L'identificativo del form non è corretto o per il form non viene gestito nessun file: se l’identificativo passato non è valido o è relativo ad un form che non viene gestito tramite file

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;

}

}