«Отказ в соединении», когда xamarin.android пытается связаться с WCF - PullRequest
0 голосов
/ 11 июля 2019

Я довольно новичок в xamarin , и я пытаюсь использовать эту техно с веб-сервисом .

На данный момент у меня есть страница входа , которая спрашивает мой веб-сервис, может ли пользователь войти в систему. Для этого моя кнопка входа в систему использует переносимый класс, который вызывает веб-сервис .

Я размещал веб-службу на веб-сервере (IIS) . Так что я использую удаленный IP для использования моего веб-сервиса

Я искал решения в течение нескольких часов, проблема остается прежней.

Если кто-то может мне помочь, было бы неплохо, не забудьте сказать мне, если вам нужна дополнительная информация!

Факты:
-Подключение возвращает правильный результат при использовании wcftestclient.exe
-Соединение возвращает мне хороший результат, когда я использую UWP
-При отладке моего телефона Android появляется ошибка авторизации.
(Вы можете найти ниже код каждого компонента и сообщение об ошибке)


Сообщение об ошибке

<ч /> PageLogin.xaml.cs

    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class PageLogin : ContentPage
    {
        public PageLogin ()
        {
            InitializeComponent ();
            this.btnLogin.Clicked += BtnLogin_Clicked;
        }

        private void BtnLogin_Clicked(object sender, EventArgs e)
        {
            BOWCF.Classes.WebService service = new BOWCF.Classes.WebService();
            service.Logged += Service_Logged;
            service.Login(this.txtId.Text, this.txtPassword.Text);
        }

        private void Service_Logged(object sender, BOWCF.Models.User e)
        {
            if (e.Enabled)
            {
                Classes.Security.CurrentUser = e;
                Application.Current.MainPage = new Pages.PageMain();
            }
            else
            {
                DisplayAlert("TPTFS03", "Connexion Failed", "Ok");
            }
        }
    }
<Ч />

BOWCF.Classes.WebService

    public event EventHandler<Models.User> Logged;
    public void Login(string username, string password)
        {
            try
            {
                BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
                EndpointAddress endpointAddress = new EndpointAddress("http://XXXX.XXXX.XXXX.XXXX:XXXX/ServiceTPTFS03.svc");
                SvcTPTFS03.ServiceTPTFS03Client client = new SvcTPTFS03.ServiceTPTFS03Client();

                client.LoginCompleted += Client_LoginCompleted;

                client.LoginAsync(username, password);
            }
            catch (Exception ex)
            {
                Logged?.Invoke(null, new Models.User());
            }
        }

    private void Client_LoginCompleted(object sender, SvcTPTFS03.LoginCompletedEventArgs e)
    {
        Models.User user = Models.User.Empty;
        try
        {
            if (e.Result != null)
            {
                user = new Models.User()
                {
                    Uid = e.Result.Uid,
                    NameLast = e.Result.NameLast,
                    NameFirst = e.Result.NameFirst,
                    Login = e.Result.Login,
                    Password = e.Result.Password,
                    Enabled = e.Result.Enabled
                };
                Logged?.Invoke(null, user);
            }
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.Message);
        }  
    }       
}


IServiceTPTFS03.CS

    [ServiceContract]
    public interface IServiceTPTFS03
    {
        [OperationContract]
        User Login(string login, string password);
    }

    [DataContract]
    public class User
    {
        [DataMember]
        public Guid Uid { get; set; } = Guid.Empty;
        [DataMember]
        public string NameLast { get; set; } = string.Empty;
        [DataMember]
        public string NameFirst { get; set; } = string.Empty;
        [DataMember]
        public string Login { get; set; } = string.Empty;
        [DataMember]
        public string Password { get; set; } = string.Empty;
        [DataMember]
        public bool Enabled { get; set; } = false;
    }


ServiceTPTFS03.svc.cs

public class ServiceTPTFS03 : IServiceTPTFS03
    {
        public User Login(string login, string password)
        {
            User user = new User();
            if (login == "dreau.valerie@swiss-bourdin.com"
                && password == "1234")
            {
                user.Uid = Guid.Parse("AECB05C7-8003-4685-98CD-658761DC7C53");
                user.NameLast = "Dreau";
                user.NameFirst = "Valerie";
                user.Login = "dreau.valerie@swiss-bourdin.com";
                user.Password = "1234";
                user.Enabled = true;              
            }                     
            return user;
        }
    }

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

В вашем "BOWCF.Classes.WebService" вы должны передать httpbinding и конечный адрес.

Попробуйте это: новый SvcTPTFS03.ServiceTPTFS03Client (basicHttpBinding, endpointAddress);Я объясняю вам, что «basicHttpBinding» - это переменная и тот же «endpointAddress», если вы не передадите параметр, это невозможно для внешней сети, потому что клиент инициализируется с параметрами по умолчанию.

Ноэто хорошая работа.

0 голосов
/ 11 июля 2019

Наконец-то я нахожу решение.
1- Вы должны убедиться, что манифест android.permission.INTERNET активен.
2- Не забудьте перестроить решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...