2014-12-30 2 views
6

Я пытаюсь использовать ServiceStack клиентов по проекту Xamarin IOS и при отладке его у меня есть следующее исключение:ServiceStack клиент по проекту Xamarin.iOS

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

Код, который производит исключение состоит в следующем :

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) 
    { 
    } 

Я использую ServiceStack.Interfaces, ServiceStack.Client.Pcl и ServiceStack.Text.Pcl все имеющие версию 4.0.34. Кроме того, я ссылался на Newtonsoft.Json в версии 6.0.7.

После некоторого исследования я понял, что поставщик PCL для iOS не зарегистрирован автоматически, поэтому я добавил «IosPclExportClient.Configure();» перед созданием нового клиента службы Json и ссылкой на ServiceStack.Pcl.iOS.dll версия 4.0.0.0.

В результате получается следующая ошибка: «Не может включать в себя как„monotouch.dll“и„Xamarin.iOS.dll“в проекте же Xamarin.iOS -„Xamarin.iOS.dll“упоминается в явном виде, в то время как ' monotouch.dll 'ссылается на' ServiceStack.Pcl.iOS, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = null '. "

Есть ли предложения по решению этой проблемы?

Спасибо заранее

ответ

7

Вы должны вызвать IosPclExportClient.Configure(); при запуске приложения инициализации Экспорта клиента PCL перед использованием в приложениях IOS.

Так что в вашем методе 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.

В PCL конкретные NuGet пакеты ServiceStack больше не поддерживается, так как они были объединены в основной пакет NuGet с использованием определенного профиля.

Вы должны только включить в ваш проект пакет ServiceStack.Client. Поэтому удалите все ссылки на ServiceStack в своем проекте, очистите сборку и добавьте только ServiceStack.Client.

Если вы ссылаетесь на ServiceStack.Client.Pcl, было хорошо, как у ServiceStack.Client, у вас возникнет конфликт.

+0

Благодарим за сообщение. Я включил ServiceStack.Client, набрав «Install-Package ServiceStack.Client» в консоли диспетчера пакетов. Кроме того, я загрузил ServiceStack.Client.Pcl.dll и включил его в качестве ссылки. К сожалению, сообщение об ошибке остается неизменным. – George

+0

@George То, что я делал, НЕ ДОЛЖЕН загружаться и включать 'ServiceStack.Client.Pcl.dll'. ТОЛЬКО ссылка 'ServiceStack.Client'. 'ServiceStack.Client.Pcl' НЕ должен быть включен, потому что он будет конфликтовать с ссылкой на' ServiceStack.Client', который теперь включает встроенное требование iOS. Поэтому забудьте библиотеку PCL. – Scott

+0

Я сделал ошибку в приветствии выше! По ошибке я написал, что я загрузил ServiceStack.Client.Pcl.dll, а не ServiceStack.Pcl.iOS.dll. Извини за это. Итак, после установки ServiceStack.Client у меня есть ссылки на ServiceStack.Client, ServiceStack.Interfaces и ServiceStack.Text. Наконец, ссылка на ServiceStack.Pcl.iOS, которая требуется для использования «IosPclExportClient.Configure()», – George

Смежные вопросы