繁体   English   中英

xamarin.android尝试联系WCF时,“连接被拒绝”

[英]“Connection refused” when xamarin.android is trying to contact WCF

我对xamarin还是很陌生 ,我正在尝试将此技术与Web服务一起使用

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

我将Web服务托管在Web服务器(IIS)上 所以我使用一个远程IP来使用我的Web服务

我一直在寻找解决方案几个小时,问题仍然存在。

如果有人可以帮助我,那会很好,请记住告诉我是否需要更多信息!

事实:
-当我使用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; } 


服务TPTFS03.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和endpointadress。

试试这个:new SvcTPTFS03.ServiceTPTFS03Client(basicHttpBinding,endpointAddress); 我向您解释,“ basicHttpBinding”是一个变量,并且是相同的“ endpointAddress”,如果不传递参数,则对于外部网络是不可能的,因为客户端使用默认参数进行了初始化。

但这是一项好工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM