2014-12-30 16 views
6

Sto cercando di utilizzare i client ServiceStack su un progetto Xamarin iOS e durante il debug è ho la seguente eccezione:cliente ServiceStack su un progetto Xamarin.iOS

“System.ArgumentException: PclExport.Instance needs to be initialized”.

Il codice che produce l'eccezione è la seguente :

try 
    { 

     string strReadParam = this.xmlParser.GetString("SyncUrl"); 
     CommonStatic.SyncWSUrl = strReadParam; 

     var client = new JsonServiceClient(CommonStatic.SyncWSUrl); 
     client.Timeout = new TimeSpan(0, 0, 0, 5, 0); 
     var response = client.Get(new mSalesCheckConnectionRequest { DBSource = CommonStatic.DBSource, DBSourceInstance = CommonStatic.DBSourceInstance, DBName = CommonStatic.DBName, DBUsername = CommonStatic.DBUsername, DBPassword = CommonStatic.DBPassword }); 

     return; 

    } 
    catch (System.Net.WebException wex) 
    { 
    } 

sto usando ServiceStack.Interfaces, ServiceStack.Client.Pcl e ServiceStack.Text.Pcl tutti con la versione 4.0.34. Inoltre ho fatto riferimento a Newtonsoft.Json alla versione 6.0.7.

Dopo alcune ricerche mi sono reso conto che il provider PCL per iOS non è stato registrato automaticamente, quindi ho aggiunto "IosPclExportClient.Configure();" prima di creare un'istanza del nuovo client di servizio Json e un ServiceStack.Pcl.iOS.dll di riferimento. versione 4.0.0.0.

Il risultato è il seguente errore: "Non è possibile includere sia 'monotouch.dll' sia 'Xamarin.iOS.dll' nello stesso progetto Xamarin.iOS - 'Xamarin.iOS.dll' viene fatto riferimento in modo esplicito, mentre ' referto a 'monotouch.dll' ServiceStack.Pcl.iOS, versione = 4.0.0.0, Culture = neutro, PublicKeyToken = null '. "

C'è qualche suggerimento per risolvere questo problema?

Grazie in anticipo

risposta

7

È necessario chiamare IosPclExportClient.Configure(); quando applicazione inizia a inizializzare il PCL Esporta Client prima l'uso in applicazioni iOS.

Quindi nel tuo metodo di Main:

static void Main (string[] args) 
{ 
    // Configure ServiceStack Client 
    IosPclExportClient.Configure(); 

    // Set AppDelegate 
    UIApplication.Main (args, null, "AppDelegate"); 
} 

and a I referenced ServiceStack.Pcl.iOS.dll at version 4.0.0.0.

I pacchetti specifici Nuget PCL di ServiceStack non sono mantenuti, in quanto sono stati uniti nel pacchetto principale NuGet con profilo specifico.

Il deve includere includendo il pacchetto ServiceStack.Client nel progetto. Quindi rimuovere tutti i riferimenti a ServiceStack nel progetto, pulire la build e aggiungere solo ServiceStack.Client.

Se si fa riferimento allo ServiceStack.Client.Pcl e si ottiene ServiceStack.Client si otterrà un conflitto.

+0

Grazie per la risposta. Ho incluso ServiceStack.Client digitando "Install-Package ServiceStack.Client" nella console del gestore pacchetti. Inoltre ho scaricato ServiceStack.Client.Pcl.dll e incluso come riferimento. Sfortunatamente il messaggio di errore rimane lo stesso. – George

+0

@George Il punto che stavo facendo è NON scaricare e includere 'ServiceStack.Client.Pcl.dll'. SOLO riferimento 'ServiceStack.Client'. 'ServiceStack.Client.Pcl' NON deve essere incluso, perché entrerà in conflitto con il riferimento a' ServiceStack.Client' che ora include il requisito iOS integrato. Quindi dimenticate la libreria PCL. – Scott

+0

Ho fatto un errore nel commento qui sopra! Per errore ho scritto che ho scaricato ServiceStack.Client.Pcl.dll anziché ServiceStack.Pcl.iOS.dll. Scusa per questo. Quindi, dopo aver installato ServiceStack.Client, ho riferimenti a ServiceStack.Client, ServiceStack.Interfaces e ServiceStack.Text. Infine un riferimento a ServiceStack.Pcl.iOS che è necessario per utilizzare "IosPclExportClient.Configure()" – George