Buongiorno a tutti,
Qualcuno utilizzando .NET e client WCF per connettersi all’SDI, chiamando il Web-Service “RiceviFile” ha avuto a che fare con questo errore?:
“MTOM messages must have type 'application/xop+xml”
Ho già impostato il messageEncoding=“Mtom” non capisco dosa faccia fallire la chiamata
buongiorno,
sto cercando di accreditarmi sul canale SDI tramite un programma sviluppato in vb.net, ho ricevuto i certificati, li ho installati e da questo punto di vista sembra tutto OK.
ho creato un collegamento tramite “servizio WEB” al WS di SDI “RiceviFile” mi ha scaricato il wsdl e generato il codice vb.
passo tutti i parametri richiesti: Url, certificato, file, etc… ma al momento della chiamata del metodo “Ricevifile” ottengo un errore Soap “internal error”.
ho provato a scrivere il tuo codice ma all’istruzione (… sdiws = new sdi.ricevifile.sdiricevifileclient(newbind,endpoint) mi dice che devo indicare una interfaccia (che non saprei come creare per questo uso).
spero tanto in un aiuto perchè ho trovato tanto materiale ma molto frammentato e questo non mi ha fatto capire dove potrei sbagliare.
grazie
saluti
Francamente non capisco se è ancora un problema di certificati (ma diverso) o se è un problema di come ho programmato i web service. Il mio ambiente è lamp. Tu come avevi risolto?
Mi auto-rispondo perchè può essere utile a tutti. Era un problema del mio file php “server”: stavo usando una versione modificata della prima versione del file trasmissione-fatture.php della Simevo. L’ho sostituito con questo file:
io ho installato correttamente i certificati e comunico correttamente con lo SDI. Il mio problema è al momento della risposta .
Visualizzando il tuo codice ho notato che hai “SdITrasmissioneFileClient”.
Potresti dirmi come hai fatto creare questo client, poichè generando la referenza al servizio dal file asmx dato da loro non riesco a generarlo.
Ciao a tutti, ho iniziato a fare i test di interoperabilità con codice .net con ws wcf (vb.net per l’esattezza) e sono fermo al dannato messaggio “Internal Error” tra l’altro dato da una FaultException con nel FaultCode l’indicazione che l’errore sarebbe lato loro:
Code.IsPredefinedFault=True
Code.IsReceiverFault=True
Code.IsSenderFault=False
Ho provato sia con il binding standard (con il codice di @G1zm0) sia con il codice consigliato da @davidehow.
Private Function GetSdiRiceviNotificaClient() As SDIRiceviNotificaService.SdIRiceviNotifica
Dim myAddress = New EndpointAddress(If(IsTest, "https://testservizi.fatturapa.it/ricevi_notifica", "https://servizi.fatturapa.it/ricevi_notifica"))
Dim myBinding = CreateMultiFactorAuthenticationBinding()
Dim myFactory = New ChannelFactory(Of SDIRiceviNotificaService.SdIRiceviNotifica)(myBinding, myAddress)
myFactory.Credentials.ClientCertificate.Certificate = New X509Certificate2(Commons.ClientCertPath, Commons.ClientCertPassword)
'myFactory.Credentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, Commons.SDIClientThumbprint)
myFactory.Endpoint.Contract.ProtectionLevel = Security.ProtectionLevel.Sign
myFactory.Credentials.ServiceCertificate.SetDefaultCertificate(StoreLocation.LocalMachine, StoreName.Root, X509FindType.FindByThumbprint, If(IsTest, Commons.SDITestServiziFatturaIt, Commons.SDIServiziFatturaIt))
myFactory.Credentials.ServiceCertificate.SslCertificateAuthentication = New X509ServiceCertificateAuthentication()
myFactory.Credentials.ServiceCertificate.SslCertificateAuthentication.CertificateValidationMode = X509CertificateValidationMode.None
myFactory.Credentials.ServiceCertificate.SslCertificateAuthentication.RevocationMode = X509RevocationMode.NoCheck
Dim myChannel = myFactory.CreateChannel
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
System.Net.ServicePointManager.ServerCertificateValidationCallback = AddressOf AcceptAllCertifications
Return myChannel
End Function
Private Function CreateMultiFactorAuthenticationBinding() As Binding
Dim asbe = New AsymmetricSecurityBindingElement
asbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10
asbe.InitiatorTokenParameters = New X509SecurityTokenParameters
asbe.RecipientTokenParameters = New X509SecurityTokenParameters
asbe.ProtectTokens = True
asbe.MessageProtectionOrder = ServiceModel.Security.MessageProtectionOrder.SignBeforeEncrypt
asbe.SecurityHeaderLayout = SecurityHeaderLayout.Strict
asbe.EnableUnsecuredResponse = True
asbe.IncludeTimestamp = False
asbe.SetKeyDerivation(False)
asbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128Rsa15
Dim myBinding = New CustomBinding
myBinding.Elements.Add(asbe)
myBinding.Elements.Add(New MtomMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8))
'myBinding.Elements.Add(New TextMessageEncodingBindingElement(MessageVersion.Soap12, Encoding.UTF8))
Dim httpsBindingElement = New HttpsTransportBindingElement()
httpsBindingElement.RequireClientCertificate = True
myBinding.Elements.Add(httpsBindingElement)
Return myBinding
End Function
Private Function AcceptAllCertifications(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
Return True
End Function
Ho solo modificato il TextMessageEncoding con il MtomMessageEncoding visto che dovrebbe essere il sistema da utilizzare.
A questo punto non so più come fare, può essere qualche problema lato loro? Come mi posso muovere?
Buongiorno a tutti.
Mi unisco alla conversazione. Stiamo cercando di completare l’accreditamento.
Siamo in fase di test. Inviamo le fatture regolarmente in ambiante ASP.NET IIS. Il nostro endpoint di ricezione notifiche è un ws asmx.
Il problema è nella ricezione delle notifiche.:
Ho installato i certificati, richiamando il certificando nel binding su IIS
Ho attivato il require SSL su Accept ma ho provato anche le altre opzioni
Ho configurato il registro su manyToOne
Nei vari trace sul server vedo le chiamate dello SDI sul mio endpoint
Da browser il mio endpoint mi richiede il certificato
Purtroppo però ricevo sempre l’errore:
org.apache.axis2.AxisFault: HTTP ( 500 ) Internal Server Error address : https://26.2.162.231:80
Sapete se dalla dinamica descritta il problema è sui certificati o sul webservice che espongo? Ho letto vari post sul webservice e su MTOM. Ma non sono sicuro ancora di aver superato il problema certificati.
Ringrazio in anticipo per la collaborazione. Sono anche a disposizione per condividere le procedure che ho superato con successo se a qualcuno possono server.
Se dalla soluzione fai Aggiungi - Riferimento al servizio e nel link indichi direttamente il percorso online del wsdl ti crea già tutto lui.
Ti scrivo qui il link per comodità
funziona… io importavo in modo diverso!!!
ora però mi da errore EI01. Ho verificato ma il file di test xml firmato viene allegato, inserito nel oggetto che invio, ma sembra non funzionare.