Я получаю сообщение об ошибке при использовании веб-службы WCF в формах Xamarin (кросс-платформенный) - PullRequest
1 голос
/ 01 мая 2020

Ниже приведена ошибка, которую я получаю

Код серьезности Описание Состояние подавления строки файла проекта

Error CS1061 'Task<List<string>>' does not contain a definition for 'ToList' and no accessible extension method 'ToList' accepting a first argument of type 'Task<List<string>>' could be found (are you missing a using directive or an assembly reference?) LoginForm C:\Users\test\source\repos\LoginForm\LoginForm\LoginForm\MainPage.xaml.cs 26 Active

Тип данных, выбранный при вызове веб-службы, был "System.Collections.Generic.List" для сбора type и для типа Dictionary Dictionary это было по умолчанию "System.Collections.Generic.Dictionary".

Ниже создан веб-сервис WCF

public List<string> LoginUserDetails(UserDetails userInfo)
        {
            List<string> usr = new List<string>();
            SqlConnection con = new SqlConnection("Data Source=Test; Initial Catalog=crm_db; User ID=sa;  Password=****");
            con.Open();
            SqlCommand cmd = new SqlCommand("select username,password from crm_tbl_admin where username=@UserName and password=@Password", con);
            cmd.Parameters.AddWithValue("@UserName", userInfo.UserName);
            cmd.Parameters.AddWithValue("@Password", userInfo.Password);

            SqlDataReader dr = cmd.ExecuteReader();

            if (dr.Read() == true)
            {
                usr.Add(dr[0].ToString());
            }
            con.Close();
            return usr;
        }
Below is the code for calling wcf in Xamarin's MainPage.Xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using ServiceReference1;
using System.ServiceModel;

namespace WCF_LoginApp
{
    public partial class MainPage : ContentPage
    {
        Service1Client obj = new Service1Client();
        private static EndpointAddress endPoint = new EndpointAddress("http://localhost/ServiceLogin11/Service1.svc");
        private static NetTcpBinding binding;
        public MainPage()
        {
            InitializeComponent();
            binding = CreateBasicHttpBinding();
        }
        private static NetTcpBinding CreateBasicHttpBinding()
        {
            NetTcpBinding binding = new NetTcpBinding
            {
                Name = "netTcpBinding",
                MaxBufferSize = 2147483647,
                MaxReceivedMessageSize = 2147483647
            };

            TimeSpan timeout = new TimeSpan(0, 0, 30);
            binding.SendTimeout = timeout;
            binding.OpenTimeout = timeout;
            binding.ReceiveTimeout = timeout;
            return binding;
        }
        private void BtnLogin_Clicked(object sender, EventArgs e)
        {
            try
            {
                UserDetails userinfo = new UserDetails();
                userinfo.UserName = usernameEntry.Text;
                userinfo.Password = passwordEntry.Text;
                List<string> msg =  obj.LoginUserDetailsAsync(userinfo).ToList();
                //var result = obj.LoginUserDetailsAsync(userinfo);
                //string msg = result.ToString();
                messageLabel.Text = "Employee Name = " + msg.ElementAt(0);

            }
            catch (Exception ex)
            {
                // messageLabel.Text = "Wrong Id Or Password";
                throw ex;
            }
        }
    }
}

Я новичок в разработке для мобильных устройств. Здесь я пытаюсь подключить удаленная база данных в Xamarin формы для входа пользователя с использованием учетных данных базы данных, пожалуйста, помогите мне

Пожалуйста, помогите мне Спасибо заранее

1 Ответ

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

вы вызываете метод async без использования await

List<string> msg =  obj.LoginUserDetailsAsync(userinfo).ToList();

должно быть

var data =  await obj.LoginUserDetailsAsync(userinfo);
List<string> msg = data.ToList();

вам также необходимо добавить async к сигнатуре вашего метода

private async void BtnLogin_Clicked(object sender, EventArgs e)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...