You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:04:51