2015-04-29 13 views
7

Ho un servizio Web SOAP da cui estrarre varie informazioni. La maggior parte delle funzioni funziona correttamente, ma ho bisogno di alcune funzioni per restituire un List.TargetInvocationException durante il recupero dell'elenco dal servizio Web SOAP in Azure

Il WebMethod è definito come:

List<MyType> myTypes = new List<MyTypes>(); 

[WebMethod] 
public List<MyType> GetAllMyTypes() 
{ 
    string sql = "SELECT * FROM MyType"; 
    DataTable dt = new DataTable(); 
    dt = Globals.GLS_DataQuery(sql); 

    List<MyType> myType = new List<MyType>(); 
    foreach (DataRow row in dt.Rows) 
    { 
     MyType myType = new MyType() 
     { 
      ID = (int)row["Id"] 
     }; 

     myTypes.Add(myType); 
    } 

    return myTypes; 
} 

Il servizio web viene fatto riferimento nel progetto principale e si chiama da:

client.GetAllMyTypesCompleted += client_GetAllMyTypesCompleted; 
client.GetAllMyTypesAsync(); 

client_GetAllMyTypesCompleted è definito come:

private void client_GetAllMyTypesCompleted(object sender, GetAllMyTypesCompletedEventArgs e) 
{ 
    var collection = e.Result; 
} 

È qui che viene lanciato il numero TargetInvocationException, specifico lly riguardo a Result. Se si esegue il servizio Web da solo, vengono restituiti i dati corretti. Per avere un riferimento GLS_DataQuery è definito come:

public static DataTable GLS_DataQuery(string sql) 
{ 
    DataTable dt = new DataTable 
    SqlCommand command = new SqlCommand(sql, connection); 
    SqlDataAdapter adapter = new SqlDataAdapter(command); 
    adapter.Fill(dt); 

    return dt; 
} 

Allora perché sto vedendo questo errore? O come dovrei restituire una lista di oggetti in questa istanza?

Potrebbe essere importante che il servizio Web sia ospitato in Azure.

MODIFICA: il collegamento del debugger all'istanza del servizio Web in esecuzione in Azure vede che restituisce i dati corretti. L'errore viene generato in un'app di telefono Xamarin che sta chiamando il servizio web. Il "messaggio" dell'errore è semplicemente un errore di riferimento nullo e l'analisi dello stack è:

a MyApp.MyService.Service1SoapClient.EndGetAllMyTypes (IAsyncResult risultato) a MyApp.MyService.Service1SoapClient.OnEndGetAllMyTypes (IAsyncResult risultato) a System.ServiceModel.ClientBase`1.OnAsyncCallCompleted (IAsyncResult risultato)

+0

Si prega di inviare il messaggio di eccezione, in particolare l'eccezione interna. – Alex

+0

L'eccezione interna è semplicemente una 'NullReferenceException'. – anothershrubery

risposta

2

Così scopre che è necessario aggiungere HttpGet e HttpPost ai protocolli nel web.config del web s ervice.

<system.web> 
    <webServices> 
     <protocols> 
      <add name="HttpSoap"/> 
      <add name="HttpPost"/> 
      <add name="HttpGet"/> 
      <add name="Documentation"/> 
     </protocols> 
    </webServices> 
</system.web> 
Problemi correlati