我有一个Oata即WCF数据服务正在运行。是否有可能Silverlight客户端以编程方式仅使用服务的URL添加该服务的引用?
目前我通过右键单击项目添加服务引用,添加服务引用,发现然后添加服务引用。如何以编程方式执行此操作?
答案 0 :(得分:2)
这有几个原因是不可能的,其中几个原因在这里:
在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响应。
答案 1 :(得分:0)
您应该执行以下操作:
BasicHttpBinding binding = new BasicHttpBinding();
var endpoint = new EndpointAddress("<Yours Endpoint Address>");
var factory = new ChannelFactory<IYourServiceContract>(basicHttpBinding, endpointAddress);
希望这会有所帮助。