2010-06-25 8 views
1

Я довольно новичок в WCF DataServices (OData), и мне нужно знать, как лучше всего создать экземпляр контейнера сущности на клиенте без жесткого кодирования URI. Похоже, что все примеры на MSDN описывают инстанцировании клиент, как это:Как создать экземпляр WCF DataServices Клиент без жесткого кодирования URI

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

Однако, я знаю, что я должен быть где-то что-то не хватает, потому что это не имеет никакого смысла прописывать коде адреса службы, как это. Во-первых, как вы динамически меняете адрес при переходе от разработки к тестированию к качеству к производству, когда у каждой среды, вероятно, будет другой URI?

Спасибо за любое понимание этого.

ответ

4

Поместите свой URL-адрес 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

Я подумал об этом - просто поместив его в AppSettings, но я решил, что для его приближения должен быть более «основополагающий» метод. Я немного подожду, если кто-нибудь еще совершит лучший подход, прежде чем принять ваш ответ, но это может быть так. – camainc

1

Если вы работаете с Silverlight приложения вы можете получить доступ к Ури из XAP с application.current.host
Затем вы можете добавить относительное Uri, чтобы получить услуги Uri:

Uri основание = применение. current.host; Uri relService = новый Uri (".. \ someservice.svc", System.UriKind.Relative);

Uri service = новый Uri (базовый, relService); DataServiceContext svc = new DataServiceContext (service);