65.9K
CodeProject 正在变化。 阅读更多。
Home

Xamarin Form 消费 WCF

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.76/5 (12投票s)

2016年6月16日

CPOL

2分钟阅读

viewsIcon

41148

在 Xamarin Form PCL 根目录下消费 WCF WebService 的绝佳技巧

引言

Xamarin Form 可能是移动应用开发中最具吸引力的工具。但目前,从 Xamarin Form PCL 消费 WCF 仍然是一种挑战。为了实现此功能,我们的开发团队付出了很多努力。最终成功的方案颇具技巧。为了与社区分享,我们想在此发布一个详细的分步描述。

背景

开发环境是 Windows 10 家庭版和 Visual Studio 2015 Community。我们尝试了很多方法,基于在线文档和帖子,在 PCL 中创建一个 WCF 代理。但没有一个能直接使用。后来,我们尝试了稍微不同的方法,并且成功了。

分步描述

1. 使用最高的 .NET 版本创建一个 Xamarin Form 应用程序解决方案

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

解决方案资源管理器如下所示


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

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


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

我们需要做的就是将 PCL 设置为 Profile 78。以下方法使其可行

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. 为了测试代理,在根文件 App.cs 中创建一个方法 callWCF(),并在构造函数内部以异步方式调用它

public App()
{
    …
    callWCF();
}


private void callWCF()
{
    var wcf = new ServiceReference2.Service1Client();
    wcf.GetDataCompleted += Wcf_GetDataCompleted; // Receive feedback asynchronously
    wcf.GetDataAsync(123456); // Send request asynchronously
}

private void Wcf_GetDataCompleted(object sender, ServiceReference2.GetDataCompletedEventArgs e)
{
    string str = e.Result; // This value should be: “You entered: 123456”
    throw new NotImplementedException();
}

在这种情况下,从 WCF 检索到的值在 e.Result 处应该是“您输入的是:123456”。

12. 注意:WebService 方法 GetData() 如下所示

public string GetData(int value)
{
    return string.Format("You entered: {0}", value);
}

关注点

实现 Profile 78 的技巧可能是一种可行的解决方法来解决 WCF 消费问题。

© . All rights reserved.