如何从PCL项目调用远程WCF?VS2017 Xamarin Forms无服务引用入口求助
解决VS2017中Xamarin Forms项目添加WCF服务引用的问题
嘿,我之前在VS2017里开发Xamarin Forms时也碰到过这个头疼的问题——项目里找不到添加WCF服务引用的入口!后来摸索出几个可行的方案,分享给你:
方案一:用类库中转最省心
Xamarin项目本身确实不支持直接添加服务引用,我们可以找个“中间层”:
- 先在解决方案里新建一个**.NET Standard类库**(或者共享项目)
- 右键这个类库项目,就能看到「添加」→「服务引用」的选项了!输入你的WCF服务地址,跟着向导完成配置
- 生成服务代理后,把类库里的代理类文件复制到你的Xamarin Forms项目里,同时把类库
App.config里的绑定、端点配置信息提取出来 - 因为Xamarin对配置文件的支持有限,建议把这些配置逻辑写到代码里(比如手动创建Binding和EndpointAddress实例),或者把配置文件添加到Xamarin项目并设置为「始终复制到输出目录」
方案二:手动用SvcUtil生成代理
如果不想额外建类库,可以用VS自带的SvcUtil.exe工具手动生成客户端代码:
- 找到你VS2017的SvcUtil路径,一般在
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\svcutil.exe(根据你的VS版本和安装路径调整) - 打开命令提示符,运行下面的命令(替换成你的服务地址):
svcutil.exe http://你的WCF服务地址?wsdl /out:WcfClient.cs /config:App.config - 把生成的
WcfClient.cs添加到Xamarin Forms项目,然后把App.config里的配置转换成代码(示例如下):// 手动创建绑定和端点 var basicBinding = new BasicHttpBinding(); var serviceEndpoint = new EndpointAddress("http://你的WCF服务地址"); // 实例化服务客户端 var wcfClient = new YourWcfServiceClient(basicBinding, serviceEndpoint); // 调用服务方法 var result = await wcfClient.YourServiceMethodAsync();
方案三:试试Connected Services(限VS2017较新版本)
如果你的VS2017更新到了比较新的版本,可以试试这个更便捷的方式:
- 右键Xamarin Forms项目,选择「添加」→「Connected Service」
- 在弹出的窗口里找到「Microsoft WCF Web Service Reference Provider」,跟着向导输入服务地址就能生成代理了
⚠️ 注意:Xamarin对WCF的支持主要集中在BasicHttpBinding这类基础绑定,像WSHttpBinding这类高级绑定可能会有兼容性问题,建议先测试基础绑定的服务哦。
内容的提问来源于stack exchange,提问作者David Rodrigues
相关产品推荐
相关产品推荐

