如何在silverlight中以编程方式添加WCF数据服务(ODATA)引用

如何在silverlight中以编程方式添加WCF数据服务(ODATA)引用,silverlight,wcf-data-services,odata,Silverlight,Wcf Data Services,Odata,我有一个Oata,即WCF数据服务正在运行。silverlight客户端是否可以通过编程方式仅使用服务的URL添加该服务的引用 目前,我通过右键单击项目、添加服务引用、发现并添加服务引用来添加服务引用。我如何通过编程方式进行此操作?您应该执行以下操作: BasicHttpBinding binding = new BasicHttpBinding(); var endpoint = new EndpointAddress("<Yours Endpoint Address>"); va

我有一个Oata,即WCF数据服务正在运行。silverlight客户端是否可以通过编程方式仅使用服务的URL添加该服务的引用


目前,我通过右键单击项目、添加服务引用、发现并添加服务引用来添加服务引用。我如何通过编程方式进行此操作?

您应该执行以下操作:

BasicHttpBinding binding = new BasicHttpBinding();
var endpoint = new EndpointAddress("<Yours Endpoint Address>");
var factory = new ChannelFactory<IYourServiceContract>(basicHttpBinding, endpointAddress);
BasicHttpBinding=new BasicHttpBinding();
var端点=新端点地址(“”);
var factory=新的ChannelFactory(basicHttpBinding,endpointAddress);

希望这会有所帮助。

这不可能,原因有几个,这里有几个:

  • VisualStudio中的AddServiceReference生成代码(服务公开的实体和其他类型的客户端类)。Silverlight没有必要的库来轻松地处理此任务(为此,需要将大量代码重写/移植到Silverlight)

  • 为了让您的代码实际使用它,您需要编译生成的代码。在SL中无法做到这一点,因为它不包含任何编译器

  • 这对于实际使用来说不是很实用,因为使用它的代码必须能够处理它事先不知道的类型(上面代码生成的类型)。因此,您必须使用大量反射或其他类似技巧

如果您想编写一个可以访问任意OData服务的客户端应用程序,我建议您查看Microsoft.Data.OData.dll。这是最近CTP的一部分:
它还实现了OData格式的读写器(类似于XmlReader/XmlWriter,但适用于OData)。特别是它不需要预先了解服务,它可以读取任何OData响应。

但如果我没有错的话,这是针对普通WCF服务的。WCF数据服务也是这样吗?