Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [ASP.NET 1.1] WebServices e Errori

    Ciao ho una serie di webServices e adesso che sono diventati operativi devo implementarne la gestione degli errori.
    Come faccio?

    codice:
        <WebMethod(BufferResponse:=False, Description:="Retreive Addresses by Typing the Name.", MessageName:="FindAddress_Name")> _
        Public Function FindAddress(ByVal bName As String) As DataSet
            'Gestore eccezioni SOAP
            Dim CN As New OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings("connAS"))
            Dim CMD As New OleDbCommand
    		Dim DA As OleDbDataAdapter
    		Dim DS As New DataSet
            Dim strQry As String
            strQry = "SELECT * "
            strQry += "FROM GL400.INDIR00F "
            strQry += "WHERE NAME1 LIKE '" & bName.ToUpper & "%' "
            strQry += "ORDER BY CODE"
    		With CMD
    			.Connection = CN
    			.CommandText = strQry
    		End With
    		DA.SelectCommand = CMD
                Try
    				DA.Fill(DS)
    				CN.Close
    				CN = Nothing
    				Return DS
                Catch ex As Exception
                    'Throw New SoapException(ex.Message, New XmlQualifiedName("SoapHeader"))
    				Response.Write(ex.Message)
                End Try
        End Function
    Qualcuno conosce la gestione errori in SOAP?

    Grazie.

  2. #2
    pui iniziare da qui http://tinyurl.com/dt4cp

    per il resto, solitamente un web service dovrebbe essere una interfaccia verso codice scritto in una libreria e non contenere la logica al suo interno. A parte questo, accettare un parametro testo con un web service e incollarlo dentro una query sql equivale ad un suicidio a base di sqlinjection. Usa i parametri.
    In piu', non dovresti preoccuparti cosi tanto di istanziare una connection, chiuderla e metterla anche a nothing perche' sono cose che il dataadapter (che rimette la connessione nel modo in cui l'ha trovata) e il garbagecollector (che elimina gli oggetti non piu' referenziati) fanno automaticamente e comunque se proprio vuoi farlo, dovresti mettere la chiamata al metodo close della connection nella sezione "finally" del blocco try altrimenti se si verifica un errore cosi come rimarrebbe aperta.
    Saluti a tutti
    Riccardo

  3. #3
    Seguiro' attentamente i tuoi consigli, sono rimasto legato alla struttura del vecchio asp anche se sono quasi due anni che uso NET e solo che da poco ho deciso di programmare con Dreamweaver e quindi il vecchio VS faceva tutto lui con Dream è tosto usare parametri e cose simili quindi ho optato per la query, ma adesso che mi ci fai pensare mi mettono un DROP e me la becco in quel posto ...

    Per le SoapException ora ci do' un' occhiata grazie!

  4. #4
    Ho fatto cosi'

    codice:
        <WebMethod(BufferResponse:=False, Description:="Retreive Addresses by Typing the Name.", MessageName:="FindAddress_Name")> _
        Public Function FindAddress(ByVal bName As String) As DataSet
            'Gestore eccezioni SOAP
            Dim CN As New OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings("connAS"))
            Dim CMD As New OleDbCommand
    		Dim DA As New OleDbDataAdapter
    		Dim DS As New DataSet
            Dim strQry As String
            strQry = "SELECT * "
            strQry += "FROM GL400.INDIR00F "
            strQry += "WHERE NAME1 LIKE ? "
            strQry += "ORDER BY CODE"
    		With CMD
    			.Connection = CN
    			.CommandText = strQry
    		End With
    		Dim myParameter As New OleDbParameter("NAME1", OleDbType.varChar, 25, "NAME1")
    		myParameter.Direction = ParameterDirection.Input
    		myParameter.Value = bName
    		CMD.Parameters.Add(myParameter)
    		DA.SelectCommand = CMD
                Try
    				DA.Fill(DS)
    				Return DS
                Catch ex As Exception
                    'Return ex.Message
    			Finally
    				CN.Close
    				CN = Nothing
                End Try
        End Function
    Ma manca qualche cosa perchè la query non mi da record ...

  5. #5
    ti ho rimaneggiato un po la tua funzione
    codice:
    Public Function FindAddress(ByVal bName As String) As DataSet
            Dim strQry As String = "SELECT * FROM GL400.INDIR00F WHERE NAME1 LIKE ? ORDER BY CODE"
            Dim DA As New OleDbDataAdapter(strQry, System.Configuration.ConfigurationSettings.AppSettings("connAS"))
            Dim DS As New DataSet
            DA.SelectCommand.Parameters.Add("?", OleDbType.VarChar).Value = bName
            DA.Fill(DS, "GL400")
            Return DS
        End Function
    se non torna niente, prova a mettere un breackpoint e verificare il contenuto di bnome che entra nella funzione e se e' ok allora prova a far girare la stessa identica query con lo stesso valore ad es. con il query analyzer (magari non torna niente perche' avendo messo un like ti manca il carattere % prima e dopo la variabile per cercare ogni ricorrenza del valore all'interno del campo)
    Saluti a tutti
    Riccardo

  6. #6
    Ciao ti spiego inanzi tutto grazie per la 'aggiustata'

    Ora se io non metto nulla dovrebbe tirar fuori tutti i record come fanno gli altri webMethod, invece mi 'esce' la descrizione SOAP del file ma neanche un record ...

    uff ...

  7. #7
    sai che cosa ho messo questo che sono sicuro che ci sono records

    codice:
            Dim strQry As String = "SELECT * FROM GL400.INDIR00F WHERE NAME1 LIKE 'PARCO' ORDER BY CODE"
            Dim DA As New OleDbDataAdapter(strQry, System.Configuration.ConfigurationSettings.AppSettings("connAS"))
            Dim DS As New DataSet
            'DA.SelectCommand.Parameters.Add("?", OleDbType.VarChar).Value = "PARCO"
            DA.Fill(DS, "GL400")
            Return DS
    Ma non escono records.
    Ma non basta cambiare il codice nel asmx, devo anche ricompilare ogni volta??

    ;-)

  8. #8
    Originariamente inviato da raffaeu
    ...se io non metto nulla dovrebbe tirar fuori tutti i record come fanno gli altri webMethod, invece mi 'esce' la descrizione SOAP del file ma neanche un record ...
    forse mi e' sfuggito qualcosa ma da come hai scritto la query se non metti niente rimarrebbe un solitario like = '' che a seconda dei dati presenti nella tabella potrebbe non tornarti niente (diverso sarebbe se fosse like = '%')
    Saluti a tutti
    Riccardo

  9. #9
    bravo risolto infatti ...


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.