43 messaggi dal 27 ottobre 2014
Ciao Moreno,

grazie per la tua pazienza. Le avevo già provate un po' tutte e quella che mi hai suggerito era tra le prime prove da me effettuate, ma .... niente: il documento continua a rimanere nella <Envelope>.

A questo punto ho provato a simulare il tuo progetto in una nuova applicazione, modificando il codice con l'endpoint corretto:
        Dim myBinding As New ServiceModel.BasicHttpsBinding()
        Dim ea As New EndpointAddress("https://fseservicetest.sanita.finanze.it/FseInsServicesWeb/services/fseComunicazioneMetadati")
        Dim Client = New FSE_ComMetadati.comunicazioneMetadatiPTClient(myBinding, ea)
        System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
        Dim richiesta As New FSE_ComMetadati.ComunicazioneMetadatiRichiesta()
        richiesta.documento = File.ReadAllBytes("D:\LabnetW\CDA_Referto-signed.xml")
        Client.comunicazioneMetadati(richiesta)



app.config è modificato come segue:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="comunicazioneMetadatiBinding" messageEncoding="Mtom"/>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://fseservicetest.sanita.finanze.it/FseInsServicesWeb/services/fseComunicazioneMetadati"
                binding="basicHttpBinding" bindingConfiguration="comunicazioneMetadatiBinding"
                contract="FSE_ComMetadati.comunicazioneMetadatiPT" name="fseComunicazioneMetadati" />
        </client>
    </system.serviceModel>
</configuration>


Ma a parte l'errore interno che ricevo (probabilmente perchè manca la Basic Autentication e/o le altre informazioni, Fiddler mi riporta:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <VsDebuggerCausalityData xmlns="http://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink">uIDPoyOOPXDrgB9DhJ6/RXHeRiwAAAAAC+7nq1joBk+Kd9CUEsX0YfsBCuUI3RJPoYYsgDRQjgkACQAA</VsDebuggerCausalityData>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ComunicazioneMetadatiRichiesta xmlns="http://comunicazionemetadatirichiesta.xsd.fse.ini.finanze.it">
      <documento>PD94bWwgdmVyc2lvbj0iMS4wI .............. </documento>
    </ComunicazioneMetadatiRichiesta>
  </s:Body>
</s:Envelope>


E' da impazzire?

Grazie. Saluti.
Modificato da Enzo58 il 21 giugno 2019 12:16 -
11.861 messaggi dal 09 febbraio 2002
Contributi
Ciao Enzo,


E' da impazzire?

No, bisogna solo fermarsi un attimo e fare ricerca per capire il significato del codice che stai usando. Altrimenti è come cercare di decifrare i geroglifici senza la stele di Rosetta.

Questo codice non va bene perché stai ridefinendo il binding e l'endpoint con codice VB.NET, quindi escludendo completamente qualsiasi configurazione sia stata fatta dal web.config.
Dim myBinding As New ServiceModel.BasicHttpsBinding()
Dim ea As New EndpointAddress("https://fseservicetest.sanita.finanze.it/FseInsServicesWeb/services/fseComunicazioneMetadati")
Dim Client = New FSE_ComMetadati.comunicazioneMetadatiPTClient(myBinding, ea)


Il client invece va creato come ti mostravo nell'esempio precedente, cioè semplicemente così. In questo modo il client cercherà la configurazione nel file web.config.
Dim client = New FSE_ComMetadati.comunicazioneMetadatiPTClient()
'Poi il resto va bene così com'era
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
'Se hai errore "Impossibile stabilire una connessione sicura", allora decommenta questa riga, almeno finché sei in sviluppo
'System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(sender, certificate, chain, sslPolicyErrors) True
Dim richiesta As New FSE_ComMetadati.ComunicazioneMetadatiRichiesta()
richiesta.documento = File.ReadAllBytes("D:\LabnetW\CDA_Referto-signed.xml")
client.comunicazioneMetadati(richiesta)


Bisogna fare una correzione: dato che l'endpoint è HTTPS (cioè https://fseservicetest.sanita.finanze...), allora dovrai usare il basicHttpsBinding, anziché il basicHttpBinding. Ecco la nuova configurazione da mettere nel web.config.
  <system.serviceModel>
    <bindings>
      <basicHttpsBinding>
        <binding name="comunicazioneMetadatiBinding" messageEncoding="Mtom" />
      </basicHttpsBinding>
    </bindings>
    <client>
      <endpoint address="https://fseservicetest.sanita.finanze.it/FseInsServicesWeb/services/fseComunicazioneMetadati"
          binding="basicHttpsBinding" bindingConfiguration="comunicazioneMetadatiBinding"
          contract="FSE_ComMetadati.comunicazioneMetadatiPT" name="fseComunicazioneMetadati" />
    </client>
  </system.serviceModel>


Questo servizio prevede qualche tipo di autenticazione? Con certificati client o in altro modo?


ciao,
Moreno
Modificato da BrightSoul il 23 giugno 2019 12:01 -

Enjoy learning and just keep making
43 messaggi dal 27 ottobre 2014
Ciao Moreno,

modificando come da te indicato:
          <basicHttpsBinding>
                <binding name="comunicazioneMetadatiBinding" messageEncoding="Mtom" />
            </basicHttpsBinding>
........

           <endpoint address="https://fseservicetest.sanita.finanze.it/FseInsServicesWeb/services/fseComunicazioneMetadati"
                binding="basicHttpsBinding" bindingConfiguration="comunicazioneMetadatiBinding"
                contract="FSE_ComMetadati.comunicazioneMetadatiPT" name="fseComunicazioneMetadati" />


e
                Dim FSE_Richiesta = New FSE_ComMetadati.ComunicazioneMetadatiRichiesta
                Dim FSE_Ricevuta = New FSE_ComMetadati.ComunicazioneMetadatiRicevuta
                Dim Client = New FSE_ComMetadati.comunicazioneMetadatiPTClient()


Ricevo l'errore:

Impossibile trovare l'elemento endpoint predefinito che fa riferimento al contratto 'FSE_ComMetadati.comunicazioneMetadatiPT' nel servizio di configurazione client ServiceModel. È possibile che non sia stato trovato nessun file di configurazione per l'applicazione o che nell'elemento client non sia stato trovato un elemento endpoint corrispondente al contratto.

Sembrerebbe che l'App.config non venga preso in considerazione .....

Il servizio richiede una basic authentication e l'installazione di alcuni certificati ...

Mi chiedevo se fosse possibile postare un progettino .zip con tutto il necessario per effettuare delle prove con dati comuni ....

Grazie. Saluti.

Enzo
Modificato da Enzo58 il 24 giugno 2019 10:55 -
43 messaggi dal 27 ottobre 2014
Ciao Moreno,

credo di aver risolto: meditando sul fatto che probabilmente il contenuto di app.config venisse ignorato, sono tornato sulla soluzione di impostazione del bindig, ho settato la proprietà .MessageEncoding = WSMessageEncoding.Mtom e finalmente il messaggio è stato codificato come Multipart.

Il confronto con le tue è stato ovviamente determinante. Grazie infinite.

Cordiali saluti.

Enzo
11.861 messaggi dal 09 febbraio 2002
Contributi
Ok, ottimo!
Quindi ora funziona tutto, compresa la Basic Authentication?

ciao,
Moreno

Enjoy learning and just keep making
43 messaggi dal 27 ottobre 2014
SI, anche se in produzione la Basic Authentication non sarà più sufficiente e si dovrà accedere con CNS ... ma per il momento posso proseguire con il lavoro.

Grazie. Saluti.

Enzo.
6 messaggi dal 23 settembre 2019
Ciao,
sto lavorando anch'io sullo stesso progetto. Con l' MTOM nessun problema, però sto cercando di configurare il webservice in modo che esegua l'autenticazione preventiva e nell'header della request venga inserita la "Basic Authentication" seguita dalla username+password codificati in Base64.
Nell'app.config, per configurare la Basic Authentication, ho inserito il tag "security":
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpsBinding>
              <binding name="comunicazioneMetadatiBinding" messageEncoding="Mtom">
                <!-- Imposto Basic Authentication -->
                <security mode="Transport">
                  <transport clientCredentialType="Basic" />
                </security>
              </binding>
            </basicHttpsBinding>
        </bindings>
        <client>
            <endpoint address="https://fseservicetest.sanita.finanze.it/FseInsServicesWeb/services/fseComunicazioneMetadati"
                binding="basicHttpsBinding" bindingConfiguration="comunicazioneMetadatiBinding"
                contract="ServiceReference1.comunicazioneMetadatiPT" name="fseComunicazioneMetadati" />
        </client>
    </system.serviceModel>
</configuration>


poi nel programmino dove creo il client ed invio la richiesta ho inserito queste righe:

//Setto BasicAuthentication
string username = "PROVAX00X00X000Y";
string password = "Salve123";
client.ClientCredentials.UserName.UserName = username;
client.ClientCredentials.UserName.Password = password;

client.comunicazioneMetadati(request);



però analizzando con Fiddler la richiesta inviata non vedo la "Basic Authentication" nell'header.
Avete qualche suggerimento da darmi Moreno o Enzo?
Grazie in anticipo per l'eventuale aiuto,
Filippo

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.