Xamarin Forms PCL与WCF集成指南

在Windows 10 Home和Visual Studio 2015 Community环境下,开发团队为了实现Xamarin FormsPCL与WCF服务的集成,付出了巨大的努力。最终,找到了一种巧妙的方法,现在愿意将这一步骤详细地分享给社区。

尝试了多种在线文档和帖子中提到的方法来在PCL中创建WCF代理,但都没有成功。后来,尝试了一种不同的方法,结果成功了。

逐步说明

1. 创建一个基于最高.NET版本的Xamarin Forms应用程序解决方案:

2. 创建一个额外的WCF应用程序项目:

3. 解决方案资源管理器应该如下所示:

备注:构建WcfService1项目。否则它无法被引用。

4. 尝试将WebService1添加到PCL作为服务引用:

看到的是没有“服务引用…”菜单项在“引用…”菜单项下。这是本文的关键点——让“服务引用…”菜单项出现。

5. 暂时通过更改包名的方式禁用NuGet包,例如:将packages.config更改为packages.config.BAK:

如果不采用这种方法,项目设置更改为Profile 78可能不被允许。

6. 现在右键单击PCL项目以打开属性:

7. 点击“更改…”按钮以打开“更改目标”对话框:

更改为上述设置,然后点击“确定”按钮。将packages.config.BAK改回packages.config。

8. 现在重复尝试添加WCF代理,菜单项“服务引用…”应该出现:

点击菜单项“服务引用…”,将出现“添加服务引用”对话框。请参见下一项:

9. 点击“发现”按钮,它找到了刚刚创建的Service1:

点击“确定”按钮。

10.WCF代理被创建为ServiceReference1:

11. 为了测试代理,创建一个方法callWCF()在根文件App.cs中,并在构造函数中异步调用:

public App() { ... callWCF(); } private void callWCF() { var wcf = new ServiceReference2.Service1Client(); wcf.GetDataCompleted += Wcf_GetDataCompleted; // 异步接收反馈 wcf.GetDataAsync(123456); // 异步发送请求 } private void Wcf_GetDataCompleted(object sender, ServiceReference2.GetDataCompletedEventArgs e) { string str = e.Result; // 这个值应该是:"You entered: 123456" throw new NotImplementedException(); }

通过这种方式,从WCF检索到的值应该是“输入了:123456”在e.Result点。

public string GetData(int value) { return string.Format("You entered: {0}", value); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485