"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是用默认参数初始化的。
但这是一份好工作。
我是 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是用默认参数初始化的。
但这是一份好工作。