VS2017下Xamarin Android应用无法连接IIS部署的WCF服务求助
解决Xamarin Android无法连接IIS部署的WCF服务问题
嘿,我看你遇到了Xamarin Android应用没法和IIS上的WCF服务建立连接的问题,咱们一步步来排查解决:
一、先确认WCF服务的部署与可访问性
- 验证WCF地址是否可外部访问:在同一局域网的电脑浏览器里输入WCF服务的完整地址(比如
http://你的IIS服务器IP/Service1.svc),如果浏览器打不开,那问题出在IIS部署环节:- 检查IIS应用池的权限,确保它有访问数据库的权限;
- 检查服务器防火墙,是否开放了WCF服务使用的端口(默认是80,如果改了端口要对应开放);
- 确认WCF的web.config里的绑定配置,优先使用
basicHttpBinding(移动设备兼容性更好,避免用wsHttpBinding这类对移动设备不友好的绑定)。
二、修正Xamarin客户端的代码问题
- 替换WCF服务地址:添加Web引用时默认用的是
localhost,但移动设备访问localhost是指自己的设备,不是IIS服务器,必须手动替换成服务器的实际IP:JosGum.Service1 myService = new JosGum.Service1(); // 替换成你的IIS服务器实际IP或域名 myService.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://192.168.1.100/Service1.svc"); myService.AddTBFCompleted += MyService_AddTBFCompleted; myService.AddTBFAsync(temp); - 完善错误处理:你的
MyService_AddTBFCompleted方法直接显示e.Error.ToString(),可以改成更详细的错误输出,方便定位:private void MyService_AddTBFCompleted(object sender, JosGum.AddTBFCompletedEventArgs e) { if (e.Error != null) { textView1.Text = $"错误信息: {e.Error.Message}\n调用栈: {e.Error.StackTrace}"; } else { textView1.Text = $"服务返回结果: {e.Result}"; } } - 添加网络权限:确保AndroidManifest.xml里添加了必要的网络权限,没有权限应用根本无法发起网络请求:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
三、修复WCF服务端的代码问题
你的WCF服务端代码有两个潜在问题,可能导致服务无法正常响应请求:
- 插入操作使用错误的方法:
AddTBF方法里用cmd.ExecuteReader()执行插入操作,这是错误的,增删改操作应该用ExecuteNonQuery():// 替换原有的cmd.ExecuteReader(); cmd.ExecuteNonQuery(); - 连接字符串冲突:你的连接字符串同时指定了
trusted_connection=yes(Windows认证)和User Id=sa; Password=(SQL Server认证),这会导致认证冲突,二选一即可:// 要么用Windows认证 private string conStr = "server =.; Database=Test; trusted_connection=yes"; // 要么用SQL Server认证 private string conStr = "server =.; User Id = sa; Password=你的密码; Database=Test";
四、调试技巧
- 给WCF加日志:在
AddTBF方法里添加日志记录(比如写入本地文本文件),确认客户端的请求是否到达服务端,如果没记录,说明请求根本没发过来,问题在网络或客户端配置;如果有记录,查看是否有异常信息。 - 抓包排查:用Charles或Fiddler抓包,查看客户端是否向WCF服务发起了请求,以及服务端的响应内容,这能快速定位是请求没发出去还是服务端返回了错误。
内容的提问来源于stack exchange,提问作者JosMelka
相关产品推荐
相关产品推荐

