簡體   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