Ciao, sono nella stessa vostra situazione. Ottengo “Internal Error” quando invoco il servizio con: srvResponse = channel.RiceviFile(srvRequest);
Per caso qualcuno ha risolto?
Dall’assistenza dicono di controllore le specifiche SOAP. Ma sembra tutto corretto.
SDI.RiceviFile.SdIRiceviFileClient sdiws = new SDI.RiceviFile.SdIRiceviFileClient(newBind, endpoint);
i security protocols sono questi
System.Net.ServicePointManager.SecurityProtocol = (System.Net.SecurityProtocolType)3072;
il certificato va inserito così:
var ccert = new System.Security.Cryptography.X509Certificates.X509Certificate2(certPath, “psw”);
sdiws.ClientCredentials.ClientCertificate.Certificate = ccert;
Bonus:
poi ti crei le classi per la chiamata
SDI.RiceviFile.RiceviFileRequest sdirequest = new SDI.RiceviFile.RiceviFileRequest();
[Popoli il tutto (ricordati del base64)]
SDI.RiceviFile.rispostaSdIRiceviFile_Type sdiresponse = new SDI.RiceviFile.rispostaSdIRiceviFile_Type();
sdiresponse = sdiws.RiceviFile(sdirequest.fileSdIAccoglienza);
[Verifiche la risposta]
Ciao Riccardo , il tuo consiglio è stato molto utile. Ho capito alcuni dubbi che avevo sulla creazione del binding e del client. Però quando invio la chiamata al ws SdiriceviFile mi da sempre lo stesso errore “Internal Error”. Ora mi sbatto un po’ sul codice e faccio debug sulla creazione della classe per vedere se capisco dove sto sbagliando.
Il codice che hai incollato è uguale al mio adesso. Però stesso errore “Internal Error”.
La callback per la validazione ritorna sempre true.
Ho provato anche a copiarlo uguale però sempre stesso errore.
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.