在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);
}