Системе конфигурации не удалось выполнить инициализацию при попытке подключения к веб-службе - PullRequest
2 голосов
/ 08 апреля 2019

У меня есть приложение Xamarin для Android, созданное с помощью Visual Studio 2017, и веб-служба ASMX.

Веб-служба публикуется и работает в веб-сервере. Приложение, находящееся в режиме отладки, подключается и работает без ошибок.

Когда я генерирую APK-файл и устанавливаю его на другом устройстве, при попытке входа в систему появляется следующая ошибка (При первом обращении к веб-службе приложение).

Configuration system failed to initialize

System.TypeInitializationException: 
The type initializer for 'System.Uri' threw an exception. ---> 
System.TypeInitializationException: 
The type initializer for 'System.UriParser' threw an exception. ---> 
System.MissingMethodException:
Method not found: bool System.Runtime.Versioning.BinaryCompatibility.get_TargetsAtLeast_Desktop_V4_5()
--- End of inner exception stack trace --- 
 at (wrapper managed-to-native)
System.Object.__icall_wrapper_mono_generic_class_init(intptr)
 at System.Uri..cctor () [0x00000] in <988fa07610c94365ae6d295a6aa379fe>: 0
--- End of inner exception stack trace ---
 at System.Configuration.ConfigurationManager.EnsureConfigurationSystem() [0x00022] in <673a29f4914b4711bafe0a24a4318f71>: 0

Я уже попробовал самый распространенный ответ на эту ошибку, но безуспешно.

<configSections>
    <sectionGroup name="applicationSettings"
                  type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >

      <section name="DCSWhseWS.Properties.Settings"
               type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
               requirePermission="false" />

    </sectionGroup>

Это Web.config, который я использую:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings"
                  type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >

      <section name="DCSWhseWS.Properties.Settings"
               type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
               requirePermission="false" />

    </sectionGroup>

  </configSections>
  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.6.1"/>
    <httpRuntime maxRequestLength="10240" executionTimeout="1200"/>
    <pages controlRenderingCompatibilityVersion="4.0"/>
  </system.web>  
  <connectionStrings>
    <add name="ConnString" connectionString="Connection String"/>
    <add name="ConnStringTest" connectionString="Connection String for Testing"/>
  </connectionStrings>
</configuration>

И вот как я вызываю веб-сервис из приложения для Android:

Кнопка:

        private async void btnLogin_Click(object sender, EventArgs e)
        {
            await Task.Run(() =>
            {
                clsUser u = new clsUser();
                u = ServiceCalls.Login(txtUser.Text);

                if (txtPass.Text.Trim().ToUpper() == u.Password.ToUpper())
                {
                    Intent i = new Intent(this, typeof(MainActivity));
                    i.PutExtra("UserAccount", JsonConvert.SerializeObject(u));
                    StartActivity(i);
                    Finish();
                }
                else
                    RunOnUiThread(() =>
                    {
                        Alert.ShowAlert("Invalid Password. please verify.", this).Show();
                    });
            });
        }

ServiceCalls.cs

internal static clsUser Login(string UserCode)
{
    WhseWS.Whse obj = new WhseWS.Whse();
    return JsonConvert.DeserializeObject<clsUser>(obj.Login(UserCode));
}

Опять же, эта ошибка не возникает, когда я отлаживаю приложение, только когда APK установлен на любом устройстве.

Большое спасибо за помощь!

EDIT:

Это манифест Android:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="DCS.Whse" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:allowBackup="true" android:label="Warehouse" android:icon="@drawable/logo"></application>
</manifest>

РЕДАКТИРОВАТЬ 2:

У меня все еще есть проблема, я начинаю думать, что это как-то связано с моим веб-сервером, поскольку у него нет SSL-сертификата. Я попытаюсь получить один и посмотреть, решит ли это проблему.

РЕДАКТИРОВАТЬ 3:

Сертификат SSL не решил проблему.

РЕДАКТИРОВАТЬ 4:

Теперь, если я отклоню первую ошибку и попытаюсь войти снова, я получаю эту ошибку:

The method or operation is not implemented.

Он работает в режиме отладки, поэтому реализована веб-служба.

При попытке создать экземпляр веб-службы возникают обе ошибки:

WhseWS.Whse obj = new WhseWS.Whse();

1 Ответ

0 голосов
/ 04 мая 2019

Давайте проверим некоторые вещи, у вас есть интернет-разрешения в Project -> Свойства -> Манифест Android .

enter image description here

В Параметры Android набор Связывание с Только сборки SDK enter image description here



Проверьте ссылки на ваши решения и попробуйте очистить и восстановить все решение, прежде чем сделать APK.
Посмотрите этот пример от Microsoft, где объясняется, как использовать ASMX Web Service в Xamarin , возможно, это может быть полезно.

Вот некоторый код, который я нашел для использования веб-службы SOAP в Xamarin .

try
{
    WhseWS.Whse obj = new WhseWS.Whse();
    obj.Url = "http://yourIPAddress:Port#/xyz.asmx";
    return JsonConvert.DeserializeObject<clsUser>(obj.Login(UserCode));
}
catch (Exception ex){
    Console.WriteLine("Exception : " + ex);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...