如何在不对URI进行硬编码的情况下实例化WCF DataServices客户端

时间:2010-06-25 14:18:48

标签: wcf wcf-client wcf-data-services odata

我对WCF DataServices(OData)相当新,我需要知道在客户端实例化实体容器的最佳方法,而无需对URI进行硬编码。似乎MSDN上的所有示例都描述了如下实例化客户端:

Uri uri = new Uri("http://www.someservice.svc");
DataServiceContext svc = new DataServiceContext(uri);

然而,我知道我必须在某处遗漏某些东西,因为硬编码这样的服务地址没有任何意义。首先,当您从开发到测试再到QA再到生产时,如果每个环境可能有不同的URI,您如何动态更改地址?

感谢您对此的任何见解。

2 个答案:

答案 0 :(得分:4)

将您的DataService网址放入,例如您的Settings文件或普通app.config

Uri uri = new Uri(ConfigurationManager.AppSettings["ServiceURI"]);
DataServiceContext svc = new DataServiceContext(uri);

在您的app.config(或web.config的网络应用中):

<appSettings>
  <add key="ServiceURI" value="http://www.someservice.svc" />
</appSettings>

或者从数据库配置表中获取它.....或者或者或者或者.....很多选择!

URI只是一个字符串 - 您可以从几乎任何配置源中获取它。

答案 1 :(得分:1)

如果您正在使用Silverlight应用程序,则可以使用application.current.host来访问xap的Uri 然后你可以添加一个相对的Uri来获得服务Uri:

Uri base = application.current.host; Uri relService = new Uri(“.. \ someservice.svc”,System.UriKind.Relative);

Uri service = new Uri(base,relService); DataServiceContext svc = new DataServiceContext(service);