Scusate mi intrometto nella discussione perchè ho un problema con invio mtom, continuo a ricevere l'errore:

I messaggi MTOM devono essere di tipo 'application/xop+xml'.

Il problema si presenta dopo che hanno alzato il protocollo a TLS 1.2. Di seguito posto il codice che uso per inviare il file zippato in formato zip Deflated ai loro end point, invio tramite mtom:
String sTestEndpointInvio = "https://invioSS730pTest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort";

InvioTelematicoSS730pMtomClient oInvio = new InvioTelematicoSS730pMtomClient("InvioTelematicoSS730pMtomPort", sTestEndpointInvio);
// Conterrà i dati di richiesta
inviaFileMtomRequest oRequest = new inviaFileMtomRequest();
// Conterrà i dati di risposta
inviaFileMtomResponse oResponse = new inviaFileMtomResponse();

String nomeFile = String.Empty;
nomeFile = String.Format("{0}\\{1}.xml", fldDirectoryOutput.NullableValue, nomefileUtente);
String nomeAllegato = String.Format("{0}\\{1}.zip", fldDirectoryOutput.NullableValue, nomefileUtente);
Zip(nomeFile, nomeAllegato, String.Empty);
FileInfo nomeZippato = new FileInfo(nomeAllegato);

String cfProprietario;
cfProprietario = Settings.ProjectSettings.CFProprietario;
oProprietario.cfProprietario = cfProprietario;
oProprietario.codiceRegione = Settings.ProjectSettings.CodiceRegione;
oProprietario.codiceAsl = Settings.ProjectSettings.CodiceASL;
oProprietario.codiceSSA = Settings.ProjectSettings.CodiceUfficio;

//Compiliamo la richiesta per la VALLE D'Aosta
oRequest.datiProprietario = oProprietario;
oRequest.nomeFileAllegato = nomeZippato.Name;
oRequest.opzionale1 = "";
oRequest.opzionale2 = "";
oRequest.opzionale3 = "";
oRequest.documento = System.IO.File.ReadAllBytes(nomeAllegato);

// Pin code già cifrato presente nei dati di test del
// kit di sviluppo. Se si ha
String pinCode = Settings.ProjectSettings.Pincode;
oRequest.pincodeInvianteCifrato = Classes.Helpers.CifraPinCode(pinCode);
oInvio.Endpoint.Behaviors.Add(new Classes.BasicAuthenticationBehavior(Settings.ProjectSettings.User, Settings.ProjectSettings.Password));
// Permette di annullare/Bypassare l'errore di certificato non conforme
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors)
{
return (true);
};
oRicevuta = oInvio.inviaFileMtom(oRequest.nomeFileAllegato, oRequest.pincodeInvianteCifrato, oRequest.datiProprietario, String.Empty, String.Empty, String.Empty, oRequest.documento);

Nel mio app.config il endpoint è configurato con basicHttpBinding. Uso il framework 4.6.1 e ora non riesco a forzare il content Type e nè a impostare la soap versione a 1.2 che potrebbe risolvere il problema.
Come posso risolvere ?
Vittorio Morellini
Questo è il file di configurazione:

<bindings>
<basicHttpBinding>
<binding name="DettaglioErrori730PortBinding" messageEncoding="Mtom">
<security mode="Transport">
<transport clientCredentialType="Basic" proxyCredentialType="None"
realm="" />
</security>
</binding>
<binding name="RicevutaPdf730PortBinding" messageEncoding="Mtom">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
</security>
</binding>
<binding name="InvioTelematicoSS730pMtomPortBinding" messageEncoding="Mtom" maxBufferSize="1048576" maxReceivedMessageSize="1048576" transferMode="Streamed" textEncoding="Soap12">
<security mode="Transport" />
</binding>
</basicHttpBinding>
<!--<customBinding>
<binding name="InvioTelematicoSS730pMtomPortBinding">
<mtomMessageEncoding messageVersion="Soap12" />
<httpTransport />
</binding>
</customBinding>
-->
</bindings>
<client>
<endpoint address="http://localhost:9083/EsitoStatoInviiWEB/DettaglioErrori730Service"
binding="basicHttpBinding" bindingConfiguration="DettaglioErrori730PortBinding"
contract="WsDettaglioErrori.DettaglioErrori730" name="DettaglioErrori730Port" />
<endpoint address="http://localhost:9083/RicevutePdf730ServiceWeb/RicevutePdf730Service"
binding="basicHttpBinding" bindingConfiguration="RicevutaPdf730PortBinding"
contract="WsRicevutaPdf730.RicevutaPdf730" name="RicevutaPdf730Port" />
<endpoint address="http://localhost:9080/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort"
binding="basicHttpBinding" bindingConfiguration="InvioTelematicoSS730pMtomPortBinding"
contract="WsInvio730.InvioTelematicoSS730pMtom" name="InvioTelematicoSS730pMtomPort" />
</client>
1 messaggio dal 21 maggio 2020
Ciao Enzo,
mi aggancio a questa tua risposta dell'anno scorso perché è relativa ad un argomento che per me è invece attuale: anch'io una volta finito di penare per la Basic Authentication mi sto cimentando con l'autenticazione tramite CNS. Ho appena ricevuto PIN e PUK del certificato ed ora mi accorgo che devo rimettere mano al codice perché questo tipo di autenticazione (la Basic) è completamente differente dal quella che servirà in produzione. Anche se io sto lavorando in Java e premesso che non voglio farti perdere troppo tempo, posso chiederti, cortesemente di mandarmi un po' di materiale che mi fa capire, anche a grandi linee, che cosa devo fare e principalmente in quale momento farlo? Va ben anche codice .Net. Magari, se ritieni, considera che il mio username, con la semplice sostituzione del tratto basso "_" con la chiocciolina "@" è anche il mio Email, potresti rispondermi direttamente. Grazie, Gianni
1 messaggio dal 25 febbraio 2005
Anche io, alla fine, sto arrivando a scontrarmi da Sogei: ci son voluti 8 mesi per farmi rispondere su cosa non andava bene sul CDA2 e ora devo fare autenticazione CNS.
Nessuna indicazione, nessuna esperienza: il mio problema, attualmente, è recuperare il certificato e poi usarlo per la chiamata.
Mi potete dare qualche dritta su qualche componente C# da utilizzare o altro?
Grazie
1 messaggio dal 24 dicembre 2022
Ciao a tutti,
anch'io ho lo stesso problema di Vitto970: "I messaggi MTOM devono essere di tipo 'application/xop+xml'"
Il progetto riguarda l'invio delle spese col sistema Tessera Sanitaria.

L'endpoint è:
<endpoint address="https://invioSS730pTest.sanita.finanze.it/InvioTelematicoSS730pMtomWeb/InvioTelematicoSS730pMtomPort"
binding="basicHttpBinding" bindingConfiguration="InvioTelematicoSS730pMtomPortBinding"
contract="InvioTelematicoSpeseSanitarie730p.InvioTelematicoSS730pMtom"
name="InvioTelematicoSS730pMtomPort" />

Il binding è:
<binding name="InvioTelematicoSS730pMtomPortBinding" messageEncoding="Mtom">
<security mode="Transport" >
<transport clientCredentialType="Basic" />
</security>
</binding>

La sequenza di istruzioni critiche è:
...
'Aggiungo il behavior che mi aggiunge i dati all'intestazione della richiesta
client.Endpoint.EndpointBehaviors.Add(New BasicAuthenticationBehavior(userName, password))

' Permette di annullare/Bypassare l'errore di certificato non conforme
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

' Per bypassare il problema del certificato non valido
ServicePointManager.ServerCertificateValidationCallback = Function(se As Object, cert As X509Certificate, chain As X509Chain, sslerror As SslPolicyErrors) True

response = client.InvioTelematicoSpeseSanitarie730p_InvioTelematicoSS730pMtom_inviaFileMtom(request)
...

Vitto970 o qualcuno di voi è riuscito a risolvere il problema?
Grazie per il vostro aiuto.
23 messaggi dal 20 giugno 2005
Ciao a tutti,
mi accodo all'ultimo messaggio, sto tentando di inviare la documentazione alla Sogei, ma ricevo questa eccezione:

System.Net.WebException: 'Connessione sottostante chiusa: Impossibile stabilire una relazione di trust per il canale sicuro SSL/TLS..'

utilizzando Fiddler, ricevo un http 200, quindi raggiungo il server, ma l'operazione no prosegue.

Creo il client in questo modo:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

mentre i dati per la request sono gli stessi utilizzati in questo Post.
Qualcuno può darmi qualche info sull'errore?

Grazie a tutti e buone feste visto la data.
Sebastiano.

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.