Ciao Tommaso,
ok, ora ho letto la documentazione, penso di aver capito il funzionamento.
TOM_YOOX ha scritto:
Praticamente, inviato un validator(string) in get sulla porta 9201 e /meraki,
Sei sicuro di dover inviare tu il codice di validazione? Nella documentazione è scritto:
Upon the first connection, the Meraki cloud will perform a single HTTP GET; the server must return the organization-specific validator string as a response
Quindi è Meraki che fa una GET alla tua pagina, che sarà ospitata sul tuo webserver aziendale. Di conseguenza, quando la tua pagina viene chiamata con il metodo GET, dovrà restituire quel codice di validazione che avevi visto nella dashboard Meraki. Solo quando questo primo passo si è concluso correttamente, allora Meraki inizierà ad inviarti delle POST sullo stesso URL.
Come soluzione, potresti anche usare un semplice httphandler ashx, ma devi dirmi tu con che tecnologia ti senti più ferrato nel lavorare perché esistono varie soluzioni che usano ASP.NET Webforms, MVC o WebAPI. Per ora ti faccio un esempio con un HttpHandler, che è forse la cosa più semplice e che ha meno dipendenze. Crei un file .ashx e lo copi in una cartella del tuo webserver.
Tieni presente che questo è solo un esempio base che soddisfa giusto i due requisiti minimi:
- Rispondere con il codice di validazione quando lo si chiama in GET
- Salvare il contenuto JSON della richiesta quando lo si chiama in POST
Tu ovviamente quel JSON dovrai interpretarlo ed usare il SECRET per verificare che non sia stato alterato (trovi info nella
whitepaper), ed infine inserire i dati nel database. Io qui mi limito a salvarlo su un file di log.
Ecco il contenuto del file ashx da cui iniziare:
<%@ WebHandler Language="C#" Class="MioNamespace.MioHandler" %>
using System;
using System.IO;
using System.Web;
namespace MioNamespace {
public class MioHandler : IHttpHandler {
//Questi vanno cambiati con i valori che trovi nella dashboard Meraki
private const string VALIDATOR = "9d37f12a4a8b0284c19adf";
private const string SECRET = "abcdefghijklmno";
public void ProcessRequest(HttpContext context) {
switch(context.Request.HttpMethod) {
case "GET":
RestituisciCodiceDiValidazione(context);
break;
case "POST":
SalvaContenutoJson(context);
break;
default:
throw new NotSupportedException(string.Format("Il metodo {0} non è supportato", context.Request.HttpMethod));
}
}
private void RestituisciCodiceDiValidazione(HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Write(VALIDATOR);
}
private void SalvaContenutoJson(HttpContext context) {
string contenutoJson;
using (var reader = new StreamReader(context.Request.InputStream)) {
contenutoJson = reader.ReadToEnd();
}
//Mi limito a salvare i dati in un file di log, senza interpretarli
File.AppendAllText(context.Server.MapPath("log.txt"), string.Format("{0:dd/MM/yyyy HH.mm.ss}\r\n{1}\r\n", DateTime.Now, contenutoJson));
//Qui tu dovrai invece parsare il Json, usare il SECRET per verificare che non è stato alterato e salvare i dati nel database
}
public bool IsReusable {
get {
return false;
}
}
}
}
Pubblicato l'ashx, vai a configurare il suo URL nella dashboard Meraki. Se tutto si è svolto correttamente, dovresti cominciare a vedere dei dati apparire nel file di log.
ciao,
Moreno
Modificato da BrightSoul il 15 febbraio 2015 09.39 -