【发布时间】:2012-01-17 04:49:27
【问题描述】:
我有一个 Oata,即 WCF 数据服务正在运行。silverlight 客户端是否可以仅使用服务的 URL 以编程方式添加该服务的引用?
目前我通过右键单击项目添加服务引用,添加服务引用,发现然后添加服务引用。如何以编程方式完成?
【问题讨论】:
标签: silverlight wcf-data-services odata
我有一个 Oata,即 WCF 数据服务正在运行。silverlight 客户端是否可以仅使用服务的 URL 以编程方式添加该服务的引用?
目前我通过右键单击项目添加服务引用,添加服务引用,发现然后添加服务引用。如何以编程方式完成?
【问题讨论】:
标签: silverlight wcf-data-services odata
这不可能有几个原因,这里有几个:
在 Visual Studio 中添加服务引用会生成代码(服务公开的实体和其他类型的客户端类)。 Silverlight 没有必要的库来相当容易地处理此任务(为此必须将大量代码重写/移植到 silverlight)。
为了让您的代码实际使用它,您需要编译生成的代码。在 SL 中无法做到这一点,因为它不包含任何编译器。
它在实际使用中不是很实用,因为使用它的代码必须能够处理它预先不知道的类型(由上面的代码生成的类型)。所以你必须使用大量的反射或其他类似的技巧。
如果您想编写一个可以访问任意 OData 服务的客户端应用程序,我建议您查看 Microsoft.Data.OData.dll。这是最近 CTP 的一部分:http://blogs.msdn.com/b/astoriateam/archive/2011/10/13/announcing-wcf-data-services-oct-2011-ctp-for-net-4-and-silverlight-4.aspx 它实现了 OData 格式的读取器和写入器(类似于 XmlReader/XmlWriter,但用于 OData)。特别是它不需要预先了解服务,它可以读取任何 OData 响应。
【讨论】:
您应该执行以下操作:
BasicHttpBinding binding = new BasicHttpBinding();
var endpoint = new EndpointAddress("<Yours Endpoint Address>");
var factory = new ChannelFactory<IYourServiceContract>(basicHttpBinding, endpointAddress);
希望这会有所帮助。
【讨论】: