3

迄今为止我读过的所有文档都建议您可以从可移植类库中创建 Web 服务库,它们都指出:

  • System.ServiceModel &
  • System.ServiceModel.Web

可用于“WebGet”属性和其他 WCF Rest 功能。

但是,当我尝试引用命名空间时,它说它不可用,并且在代码中浏览不显示命名空间。

我通常认为这意味着它在可移植类库中不可用,但命名空间在对象浏览器中可见。

我什至尝试将我的目标框架限制为:

  • .NET 4.03 及更高版本
  • Silverlight 4 及以上

但没有乔伊。即使只使用 SL5 和 .NET 4.5 仍然不会公开命名空间

有任何想法吗?

4

2 回答 2

1

答案很简单是否定的

您可以在 PCL 项目中使用所有基本的 [DataContract] / [ServiceOperation] / [DataMember] 属性,但不能将 Rest Implementation 属性放在任何东西上。

为 PCL 中的属性提供尽可能多的属性,然后在具体实现中应用 Rest 属性的简单答案(确实需要存在于 PCL 中)

另外值得注意的是,当您使用 PCL 时,很多可序列化的标签都会丢失,因此请使用将 [DataContract] [DataMember] 属性添加到您的所有模型和属性,否则您会遇到我发现的问题。

于 2012-12-07T12:33:16.500 回答
0

我认为 Visual Studio 2010 在这方面存在某种缺陷。尽管System.ServiceModelSystem.ServiceModel.Web程序集似乎被自动引用,但默认情况下它们不是,并且相应的命名空间不可用:

未定义 ServiceModel 命名空间

要解决此问题,请打开“添加引用”对话框。所有程序集似乎都被引用,但它们都不包含在项目引用列表中:

似乎引用了程序集

真正将所需的程序集添加到您的项目中,请从列表中选择程序集。现在,首先单击“删除” ,然后立即单击“添加”(或者,在列表中双击该程序集)。完成此操作后,“删除/添加”程序集现在将显式出现在项目的引用列表中:

删除/添加组件

当您键入时,相应的命名空间和类现在可用:

可用的 ServiceModel 命名空间

并且可以成功构建项目。

这似乎适用于最广泛的平台包含,即 .NET Framework 4+、Silverlight 4+、WP7+ 和 Windows Store 应用程序。这已经在 VS 2010 上使用最新的 PCL 插件进行了测试。

在 Visual Studio 2012 上,.NET 可移植子集被列为一个整体,并且不能(取消)引用子集的单个程序集。但是,在 VS 2012 上,System.ServiceModel当您创建新的可移植类库时,似乎会自动覆盖对等程序集的访问。

以上所有内容均已在具有非 Express Visual Studio 版本的 Windows 7 系统上进行了测试。

于 2012-12-05T12:08:45.023 回答