5 messaggi dal 02 novembre 2014
ciao a tutti,
relativamente al messaggio che avevo lasciato volevo dirvi che ho risolto.
In pratica non avevo bencapito che l'elenco dettagli delle prescrizioni erano una lista di oggetti e pertanto dopo aver contattato SOGEI mi hanno inviato una breve spiegazione che mi ha fatto capire cosa fare.
Grazie comunque a tutti.
8 messaggi dal 26 agosto 2006
Salve a tutti,
anche io ho lo stesso problema di autenzicazione col web service di Aruba per la FatturaPA:

0012 Errore, autenticazione soap fallita. Verificare i parametri di autenticazione per l'invocazione dei metodi


Ho provato la soluzione proposta per impostare l'header Authorization ma senza risultati. Qualcuno ha fatto progressi?
Grazie.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
hai provato a contattare l'assistenza tecnica di Aruba? Con l'altro sviluppatore abbiamo già visto che la documentazione non è molto chiara ma penso che se fai notare questo fatto ad Aruba, la correggeranno per aiutare i loro clienti. Nel frattempo, fattelo spiegare a voce o fatti mandare qualche esempio di richiesta SOAP.

Trattandosi di un meccanismo di autenticazione custom, penso che se l'informazione non arriva dalla fonte, non potremo far altro che procedere per tentativi (perdendo tempo). Facci sapere se scopri qualcosa.

ciao,
Moreno
Modificato da BrightSoul il 09 dicembre 2014 13.46 -

Enjoy learning and just keep making
8 messaggi dal 26 agosto 2006
Si, ho contattato il servizio tecnico di Aruba ed ho risolto con un esempio che mi hanno inviato.
A beneficio di tutti gli interessati, posto l'email inviatami:



Gentile cliente,
Non ci siamo legati a nessuna specifica di autenticazione particolare nota ma è sufficiente creare degli header personalizzati, uno chiamato username l'altro password e valorizzarli con la propria configurazione.

Non abbiamo esempi in ASP ma di seguito le riporto uno stralcio di codice in C# per l'invio di una fattura non firmata all'origine (in grassetto le parti che dovra personalizzare eliminando le parentesi angolate < e >)


FileInfo file = new FileInfo("<path del file xml contenente la fattura elettronica>");
var fpaService = new Prova.WSAruba.UploadServiceClient();

using (var scope = new System.ServiceModel.OperationContextScope(fpaService.InnerChannel))
{
var httpRequestProperty = new System.ServiceModel.Channels.HttpRequestMessageProperty();
httpRequestProperty.Headers.Add("username", "<proprio username>");
httpRequestProperty.Headers.Add("password", "<propria password>");

// solo se e' stato acquistato il servizio di firma automatica
httpRequestProperty.Headers.Add("credenziale", "<propria credenziale>");

OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;

byte[] bytes = System.IO.File.ReadAllBytes(file.FullName);

var retvalreq = fpaService.UploadFatturaPa(bytes, null, null, null);
}



Nessuno standard per l'autenticazione quindi, ma degli header "personalizzati". Mi chiedo perche' mai... Comunque, l'importante e' aver risolto

Vorrei pero' sottolineare che l'esempio originale era errato: infatti, come secondo, terzo e quarto parametro per l'invocazione del metodo UploadFatturaPa mi avevano scritto di mettere string.Empty, ma cosi' facendo ottenevo un errore di "PIN non valido"...
Ah, che bello quando si fa di tutto per semplificare la vita all'utente
Modificato da icebit76 il 11 dicembre 2014 12.36 -
11.886 messaggi dal 09 febbraio 2002
Contributi
icebit76 ha scritto:

A beneficio di tutti gli interessati, posto l'email inviatami:

Grazie mille per averla condivisa  .
Dunque username e password erano proprio intestazioni della richiesta HTTP.

Metto un link ad un nuovo progetto che usa un message inspector idoneo, nel caso qualcuno volesse usarlo al posto dell'OperationContextScope.
http://1drv.ms/1zC7IT9

icebit76 ha scritto:

ma degli header "personalizzati". Mi chiedo perche' mai...

Non so, forse è sembrato più semplice passare le credenziali in quel modo.
Infatti, la Basic Authentication richiede che user e password siano concatenate e poi codificate in base64. Anche se sembra più complesso, in realtà non lo è perché questo meccanismo è talmente diffuso e documentato che chiunque può realizzarlo seguendo le numerose guide disponibili su internet.

Alla fine, si è verificato che abbiamo avuto più difficoltà con il meccanismo custom, sulla carta più facile da usare.

Grazie di nuovo!

ciao,
Moreno
Modificato da BrightSoul il 11 dicembre 2014 20.55 -

Enjoy learning and just keep making
8 messaggi dal 26 agosto 2006
Buon giorno e buon anno a tutta la community.

Sono ancora alle prese con web services ed autenticazione.
Archiviato il problema con quello di Aruba, sto adesso impazzendo dietro al sistema SdI per la FatturaPA dell'agenzia delle entrate.
Dietro a tutto, ovviamente la Sogei :|

Il webservice in questione serve ad inviare una fattura e l'autenticazione deve avvenire tramite certificato client fornito da loro.
La funzione di invio delle fatture deve essere integrata all'interno un gestionale web basato su ASP.NET 4.0 WebForms.
Il certificato client ed il relativo certificato CA root sono stati correttamente installati nel sistema tramite certmgr.msc, rispettivamente all'interno di "Personale->Certificati" e "Autorità di certificazione radice Attendibii"

Il problema è che non riesco in alcun modo a farmi autenticare dal sistema. Mi spiego meglio: quando viene invoca il metodo "RiceviFile" ottengo questa eccezione:

Richiesta HTTP vietata con lo schema di autenticazione client 'Anonymous'.
Errore del server remoto: (403) Non consentito.

Non riesco a capire dove sia il problema. L'assistenza tecnica Sogei risponde alle email con il contagocce e non è molto propensa
a fornire assistenza sui dettagli tecnici di implementazione.

Il codice che utilizzo è il seguente:

var request = new RiceviFileRequest()
{
  fileSdIAccoglienza = new fileSdIBase_Type()
};

request.fileSdIAccoglienza.NomeFile = Path.GetFileName(generatedFilePath);
request.fileSdIAccoglienza.File = File.ReadAllBytes(generatedFilePath);
RiceviFileResponse response = new RiceviFileResponse();

var endpointAddress = new EndpointAddress("https://testservizi.fatturapa.it/ricevi_file");
var sslBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
sslBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

var certificateThumbprint = "0123456789ABCDEF0123456789ABCDEF01234567";
var keyStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
keyStore.Open(OpenFlags.ReadOnly);
X509Certificate2 clientCertificate = keyStore.Certificates.OfType<X509Certificate2>().First(c => c.Thumbprint == certificateThumbprint);

using (var client = new SdIRiceviFileClient(sslBinding, endpointAddress))
{
  client.ClientCredentials.ClientCertificate.Certificate = clientCertificate;

  client.Open();
  response.rispostaSdIRiceviFile = client.RiceviFile(request.fileSdIAccoglienza);
  client.Close();
}


Il codice di cui sopra è stato messo insieme dopo varie ricerche e riscontri sul web, e sembrerebbe proprio essere il metodo "canonico" per questo tipo di autenticazione.
Ogni suggerimento è il benvenuto perché non so proprio come superare il problema.
Grazie.
47 messaggi dal 27 ottobre 2014
Ciao a tutti,

avrei bisogno ancora di un aiutino dovuto alla mia inesperienza con i web services e vb.net:

Tramite un file .wsdl ho creato un ServiceReference1 composto da una classe Richiesta ed una classe Ricevuta.

La classe Richiesta contiene una proprieta' di tipo Array, che si chiama p.e. Dettaglio();

Per impostare i campi delle proprieta' di Richiesta, eseguo un

Dim richiesta = New ServiceReference1.Richiesta()

Finche' imposto i campi richiesta.xxx = "....", richiesta.yyy = "..." va tutto bene, ma se provo ad impostare p.e. la proprieta' richiesta.Dettaglio(0).xxx = "..." mi da errore di tipoSystem.NullReferenceException, ovvero l'oggetto non risulta inizializzato ......

qualcuno sa darmi velocemente una dritta ? Grazie mille in anticipo.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Enzo,
anche richiesta.Dettaglio è un oggetto che va creato con la parola chiave New, prima di poter accedere ai suoi elementi.

La NullReferenceException si riferisce appunto al fatto che stai cercando di usare un oggetto che non è stato ancora istanziato (e perciò non esiste).

E se la proprietà Dettaglio è un array di tipi complessi, allora andranno istanziati anche quelli con la parola chiave New.
Infatti penso che sia questo il caso, perché vedo che stai cercando di accedere ad una proprietà del primo elemento dell'array:

richiesta.Dettaglio(0).xxx


Puoi seguire questa guida (è una questione che riguarda la programmazione col linguaggio VB.NET in generale, anziché i webservice nello specifico).

Oppure puoi seguire questo esempio, in cui creo l'array di oggetti con un'unica espressione. Ipotizzando che Dettaglio sia un Array di oggetti Persona, fai:
richiesta.Dettaglio = New Persona() {
    New Persona With {.Nome = "Mario", .Cognome = "Rossi"},
    New Persona With {.Nome = "Luigi", .Cognome = "Verdi"}
}


ciao,
Moreno
Modificato da BrightSoul il 14 gennaio 2015 08.06 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.