Изменить DataSource WCF Data Services - PullRequest
2 голосов
/ 23 марта 2010

Кто-нибудь знает, как изменить текущий источник данных DataServices на лету?

Пример Я хочу проконсультироваться со службой и передать параметр, говорящий о том, чтобы установить другое соединение, Возможно ли?

Ответы [ 3 ]

1 голос
/ 25 марта 2010

Должно быть очень просто, есть метод переопределения, который вы можете использовать для создания источника данных.

//
// Summary:
//     Creates a data source of the template class that will be used by the data
//     service.
//
// Returns:
//     An instance of the data source.
protected virtual T CreateDataSource();

При переопределении это должно выглядеть следующим образом.

protected override MyModel CreateDataSource()
{
    MyModel modal = new MyModal();

    return modal;
}

Это даст возможность создать источник данных с другой строкой соединения.

Ниже я добавил список вещей, которые вы можете сделать, чтобы передать эту информацию в DataService, чтобы вы могли изменить соединение с вашим источником данных на лету.

1. Заголовки запроса

Вы можете на стороне клиента передавать дополнительную информацию службам данных, если вы подписываете SendingRequest на DataServiceContext, который позволяет добавлять дополнительные заголовки запросов к вашим веб-запросам. Сделав это, например, вы можете прочитать их, обратившись к System.Web.HttpContext.Current.Request.Headers в методе CreateDataSource.

Было бы неплохо иметь возможность получить доступ к внутреннему интерфейсу IDataService, который предоставляет всю информацию, необходимую для выполнения подобных действий.

2. Строка запроса

Другим способом без выполнения SendingRequest и заголовков является добавление параметра QueryString, который можно проверить в конкретном значении, и соответствующей инициализацией источника данных.

3. Идентичность

Вы можете использовать учетные данные пользователей, чтобы выбрать, какой источник данных вы хотите использовать.

Опять же, это всего лишь идеи о том, как добиться этого выбора источников данных.

Вы можете сделать несколько вещей с помощью стратегий, описанных выше. Надеюсь, это ответит на ваш вопрос и поможет вам решить вашу проблему

PS .: до тех пор, пока вы подразумеваете «изменить источник данных», измените строку подключения вашей модели к другой базе данных, вышеописанное будет работать.

0 голосов
/ 10 февраля 2012

Попробуйте переопределить функцию CreateDataSource в классе DataService.

Это позволит вам создать свой собственный источник данных с любой строкой подключения.

0 голосов
/ 24 марта 2010

Если вы хотите передать желаемое соединение в URL, я думаю, что ваш единственный вариант - создать два DataServiceHosts.

http://server/datasource1/service.svc

и

http://server/datasource2/service.svc
...