"Connection refused" 当 xamarin.android 正在尝试联系 WCF

"Connection refused" when xamarin.android is trying to contact WCF

我是 xamarin 的新手,我正在 尝试将此技术与 Web 服务一起使用

目前我只有一个 登录页面 询问我的 Web 服务用户是否可以登录。 为此,我的登录按钮 使用可移植 class 调用 Web 服务

我在网络服务器 (IIS) 上托管网络服务所以我使用远程ip来使用我的webservice

找了好几个小时,问题还是一样

如果有人能帮助我就好了,如果你需要更多信息记得告诉我!

事实:
- 连接 returns 当我使用 wcftestclient.exe
时的正确结果 - 当我使用 UWP
时,连接 returns 我得到了很好的结果 -当我在调试中使用我的 android phone 时,出现授权错误。
(您可以在下面找到每个组件的代码和错误消息)


Error Message


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;
        }
    }

终于找到解决方法了
1- 您必须确保 android.permission.INTERNET 清单处于活动状态。
2- 不要忘记重建解决方案。

在您的 "BOWCF.Classes.WebService" 中,您必须传递 httpbinding 和端点地址。

试试这个:new SvcTPTFS03.ServiceTPTFS03Client(basicHttpBinding, endpointAddress); 我给你解释一下,"basicHttpBinding"是个变量,和"endpointAddress"一样,不传参数外网是不行的,因为client是用默认参数初始化的。

但这是一份好工作。