11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
verifica di aver usato la parole chiave Implements nel definire le Sub. In VB.NET è obbligatorio usarla per implementare i membri di un'interfaccia. Se vuoi scaricarlo, nel progetto VB.NET trovi già l'implementazione dell'inspector e del behavior.
http://1drv.ms/ZUYnaz

ciao,
Moreno

Enjoy learning and just keep making
5 messaggi dal 02 novembre 2014
Grazie mille Moreno,
adesso funziona tutto.
Quelle che sto per scrivere possono sembrare parole di convenienza ma non è così.
I tempi di consegna del progetto sono diventati strettissimi e se non fosse stato per te avremmo fatto una figuraccia con i clienti.
Grazie davvero di cuore.

Daniele
4 messaggi dal 06 novembre 2014
Ok fatto, adesso funziona anche a me, grazie a tutti per l'aiuto.
Alla fine l'ho fatto in Visual Basic, carino, era tanto tempo che non programmavo in Basic...
Ciao e arrivederci a tutti!
4 messaggi dal 18 novembre 2014
Io ho lavorato nottate intere per risolvere questo problema, e alla fine ho creato una libreria che può essere utilizzata su qualsiasi ambiente di sviluppo per l'utilizzo dei Web services della SOGEI per la gestione della ricetta dematerializzata. Chi volesse utilizzarla può contattarmi al seguente indirizzo: danielelorefice@gmail.com

Buon lavoro

Daniele
4 messaggi dal 09 ottobre 2006
Salute a tutti,

ho un problema analogo nel tentativo di collegarmi ai webservice aruba relativi alla fattura elettronica. Il WSDL del servizio è visibile a questo indirizzo:

https://ptefatturapa.aruba.it/fatturapaupload/uploadws?wsdl

Aggiungendo un Service Reference e provando a fare il login coi dati di prova forniti da Aruba ottengo il messaggio d'errore "Errore, autenticazione SOAP fallita. Verificare i parametri di autenticazione per l'invocazione dei metodi".

L'assistenza Aruba si è limitata a fornirmi un file in cui dice "Per l'accesso ai metodi è necessario impostare le credenziali nell'header http della richiesta soap."

Ho provato a seguire le istruzioni di Moreno, ma ottengo sempre lo stesso errore; nello specifico, questo è il codice:

Classe BasicAuthenticationInspector


Imports System.Collections.Generic
Imports System.Configuration
Imports System.Linq
Imports System.ServiceModel.Channels
Imports System.ServiceModel.Configuration
Imports System.ServiceModel.Description
Imports System.ServiceModel.Dispatcher
Imports System.Text
Imports System.Threading.Tasks

Namespace WCFClientTest1

    Public Class BasicAuthenticationInspector
        Implements IClientMessageInspector

        Private ReadOnly _authorization As String

        Public Sub New(username As String, password As String)
            If String.IsNullOrEmpty(username) OrElse String.IsNullOrEmpty(password) Then
                Throw New ArgumentException("Devi fornire username e password")
            End If


            _authorization = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(String.Format("{0}:{1}", username, password)))
        End Sub

        Public Function BeforeSendRequest(ByRef messaggio As System.ServiceModel.Channels.Message, channel As System.ServiceModel.IClientChannel) As Object
            'ottengo un riferimento alla richiesta http sottostante
            Dim richiestaHttp = messaggio.Properties.Values.OfType(Of HttpRequestMessageProperty)().FirstOrDefault()

            If richiestaHttp IsNot Nothing Then
                richiestaHttp.Headers.Add("Authorization", _authorization)
            Else
                'non c'era? La creiamo noi.
                richiestaHttp = New HttpRequestMessageProperty()
                richiestaHttp.Headers.Add("Authorization", _authorization)
                messaggio.Properties.Add(HttpRequestMessageProperty.Name, richiestaHttp)
            End If

            Return messaggio
        End Function

        Public Sub AfterReceiveReply(ByRef reply As System.ServiceModel.Channels.Message, correlationState As Object)
            'non ci interessa esaminare la risposta
        End Sub

        Public Sub AfterReceiveReply1(ByRef reply As Message, correlationState As Object) Implements IClientMessageInspector.AfterReceiveReply

        End Sub

        Public Function BeforeSendRequest1(ByRef request As Message, channel As ServiceModel.IClientChannel) As Object Implements IClientMessageInspector.BeforeSendRequest

        End Function
    End Class

End Namespace


Classe BasicAuthenticationBehavior

Imports System.Collections.Generic
Imports System.Linq
Imports System.ServiceModel.Description
Imports System.ServiceModel.Dispatcher
Imports System.Text
Imports System.Threading.Tasks

Namespace WCFClientTest1

    Public Class BasicAuthenticationBehavior
        Implements IEndpointBehavior

        Private ReadOnly _username As String
        Private ReadOnly _password As String

        Public Sub New(username As String, password As String)
            'raccolgo user e password che passerò poi al costruttore di IClientMessageInspector
            _username = username
            _password = password
        End Sub


        Public Sub AddBindingParameters(endpoint As ServiceEndpoint, bindingParameters As System.ServiceModel.Channels.BindingParameterCollection) Implements IEndpointBehavior.AddBindingParameters

            Return
        End Sub

        Public Sub ApplyClientBehavior(endpoint As ServiceEndpoint, clientRuntime As ClientRuntime) Implements IEndpointBehavior.ApplyClientBehavior
            'aggiungo un'istanza dell'inspector
            clientRuntime.MessageInspectors.Add(New BasicAuthenticationInspector(_username, _password))
        End Sub

        Public Sub ApplyDispatchBehavior(endpoint As ServiceEndpoint, endpointDispatcher As EndpointDispatcher) Implements IEndpointBehavior.ApplyDispatchBehavior
            Return
        End Sub

        Public Sub Validate(endpoint As ServiceEndpoint) Implements IEndpointBehavior.Validate
            Return
        End Sub
    End Class

End Namespace


Codice con cui istanzio il WebServices

 Dim client As New ArubaWS.UploadServiceClient()
        client.Endpoint.EndpointBehaviors.Add(New BasicAuthenticationBehavior(username:="username_ditest", password:="password_ditest"))

        Dim ListaFatt = client.ListFatturaPA()
        MsgBox(ListaFatt.returnCode)
        MsgBox(ListaFatt.description)



Ma ho provato a istanziarlo anche in quest'altra maniera, sempre con lo stesso esito.

 
Dim BBinding As New BasicHttpsBinding()

        Dim ea As New EndpointAddress("https://ptefatturapa.aruba.it/fatturapaupload/uploadws")

        Dim ws_client As New ArubaWS.UploadServiceClient(BBinding, ea)
        'Aggiungo il behavior che mi aggiunge i dati all'intestazione della richiesta
       
        Dim bb As New BasicAuthenticationBehavior("username_ditest", "password_ditest")
        ws_client.Endpoint.EndpointBehaviors.Add(bb)

        Dim ListaFatt = ws_client.ListFatturaPA
        MsgBox(ListaFatt.returnCode)


Ho provato anche a passare l'addressheader in quest'altro modo, ma ottengo sempre la stessa risposta dal webservice:


Dim BasicBinding As New BasicHttpBinding()
        BasicBinding.MessageEncoding = WSMessageEncoding.Mtom
        BasicBinding.SendTimeout = TimeSpan.FromSeconds(25)
        BasicBinding.Security.Mode = BasicHttpSecurityMode.Transport
        BasicBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic

        ' Create address headers for special services and add them to an array
        Dim addressHeader1 As AddressHeader = AddressHeader.CreateAddressHeader("username", "https://ptefatturapa.aruba.it/fatturapaupload/uploadws", "username_ditest")
        Dim addressHeader2 As AddressHeader = AddressHeader.CreateAddressHeader("password", "https://ptefatturapa.aruba.it/fatturapaupload/uploadws", "password_diprova")
        'Dim addressHeader3 As AddressHeader = AddressHeader.CreateAddressHeader("SessionType", "https://ptefatturapa.aruba.it/fatturapaupload/uploadws", "None")
        Dim addressHeaders() As AddressHeader = {addressHeader1, addressHeader2}

        Dim address As New EndpointAddress(New Uri("https://ptefatturapa.aruba.it/fatturapaupload/uploadws"), addressHeaders)

        Dim myService2 As New ArubaWS.UploadServiceClient(BasicBinding, address)
        Dim ListaFatt = myService2.ListFatturaPA

        MsgBox(ListaFatt.returnCode)


Il servizio Aruba è basato su JAX-WS, quindi un webservice non .NET

Dove sto sbagliando ? Grazie in anticipo per l'aiuto
Modificato da franksnet82 il 30 novembre 2014 16.48 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
io ho un comportamento diverso: ottengo sempre delle risposte, ma le loro proprietà sono null. Questo succede sia impostando l'intestazione Authorization, sia non impostandola affatto.

L'assistenza dovrebbe spiegarti meglio come vanno fornite le credenziali.
franksnet82 ha scritto:

L'assistenza Aruba si è limitata a fornirmi un file in cui dice "Per l'accesso ai metodi è necessario impostare le credenziali nell'header http della richiesta soap."

Questo non è sufficiente. Di quale header http si tratta? Authorization? Quindi stanno usando la Basic Authentication?

Possibilmente fatti fornire un esempio, in un linguaggio qualsiasi.

ciao,
Moreno

Enjoy learning and just keep making
4 messaggi dal 09 ottobre 2006
Strano, a me da come returnCode 0012 e come description quella che ho postato prima ... Io sto usando Visual Studio 2013 e Framework 4.5.1 non so se incida in qualche maniera

<b>Interfaccia Web Service (WS)</b> 
Essa fornisce i metodi necessari alla richiesta e invio di una fattura.
Di seguito sono riportati i dati utili per l'integrazione.

Collaudo WSDL https://ptefatturapa.aruba.it/fatturapaupload/uploadws?wsdl
Collaudo Endpoint https://ptefatturapa.aruba.it/fatturapaupload/uploadws

Per l'accesso ai metodi è necessario impostare le credenziali nell'header http della richiesta soap.

Di seguito il dettaglio:
&#61623; username: username di accesso al servizio di fatturazione elettronica
&#61623; password: password di accesso al servizio di fatturazione elettronica

In generale l'esito delle chiamate ai metodi è facilmente desumibile dall'interpretazione del parametro returnCode contenuto nell'oggetto di output. Se returnCode è diverso da 0000 significa che c'è' stato un'errore. La descrizione dell'errore è contenuta nel parametro String description.


Questo è tutto ciò che mi è stato fornito, poi segue una sommaria descrizione dei metodi esposti, che però non incide sul discorso autenticazione
11.886 messaggi dal 09 febbraio 2002
Contributi
franksnet82 ha scritto:
me da come returnCode 0012 e come description quella che ho postato prima

Sì, hai ragione, succede anche a me. Non me ne ero accorto perché mi aspettavo di vedere una fault (cioè un'eccezione), come di solito accade in questi casi.

Grazie per aver postato lo stralcio di documentazione ma io non so ancora aiutarti. Chiunque abbia scritto quel paragrafo sta rendendo l'esperienza d'uso del servizio abbastanza frustrante.


&#61623; username: username di accesso al servizio di fatturazione elettronica
&#61623; password: password di accesso al servizio di fatturazione elettronica

Non chiarifica nulla. A leggerlo, sembra che tu debba aggiungere due intestazioni HTTP chiamate username e password, anziché un'intestazione Authorization come consuetudine. Provaci comunque. E' talmente alieno che sto riconsiderando la frase precedente:

impostare le credenziali nell'header http della richiesta soap.

Mi chiedo se non intendano intestazioni del messaggio SOAP, anziché della richiesta HTTP.

Dovresti chiedere di parlare con un tecnico di Aruba per avere dei chiarimenti. Facci sapere qual era la soluzione perché può aiutare qualcun altro.

ciao,
Moreno
Modificato da BrightSoul il 01 dicembre 2014 20.30 -

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.