Xamarin Forms调用WCF Web Service抛出空指针异常是什么原因?
Xamarin Forms调用WCF SOAP服务空指针异常修复方案
- 绑定配置兼容问题
Xamarin对WCF的绑定支持范围有限,默认生成的SOAP1.2端点配置大概率会出现内部初始化空引用。优先切换为SOAP1.1端点初始化客户端:
// 替换原有的SOAP12端点配置,使用SOAP1.1对应的枚举值 ServiceReference1.UserServicesSoapClient client = new UserServicesSoapClient(UserServicesSoapClient.EndpointConfiguration.UserServicesSoap);
- 异步上下文捕获问题
WCF客户端异步方法在Xamarin运行时中,默认捕获同步上下文容易触发未知空引用。调用异步方法时添加ConfigureAwait(false)禁用上下文捕获:
res = await client.HelloWorldAsync(req).ConfigureAwait(false);
- 平台权限缺失问题
Xamarin Forms本身没有针对WCF调用的额外权限限制,空指针大概率来自平台底层网络访问限制:- 安卓端:确认
AndroidManifest.xml中已添加INTERNET权限,若服务使用自签名HTTPS证书,需额外配置证书验证规则 - iOS端:若服务为HTTP协议,需在
Info.plist中关闭ATS限制或添加对应域名白名单
- 安卓端:确认
- 异常详情定位
你当前捕获的异常大概率是包装后的AggregateException,需要展开内部异常获取真实错误原因,修改catch块代码如下:
catch(Exception ex) { if (ex is AggregateException aggEx) { foreach(var innerEx in aggEx.Flatten().InnerExceptions) { Console.WriteLine($"内部异常信息:{innerEx.Message}\n堆栈:{innerEx.StackTrace}"); } } Console.WriteLine($"顶层异常信息:{ex.Message}\n堆栈:{ex.StackTrace}"); }
内容的提问来源于stack exchange,提问作者Gerry
相关产品推荐
相关产品推荐

