Как работать с объектами с помощью Dynamic WCF? - PullRequest
1 голос
/ 31 октября 2008

В настоящее время мы разработали приложение с использованием WCF. Наши клиенты устанавливают соединения с различными сервисными хостами WCF, расположенными на сервере, а сервисные хосты возвращают данные из БД, которые нужны клиентам. Стандартная модель. Однако в этом текущем проекте все наши данные WCF содержатся в файлах app.config как на стороне клиента, так и на стороне сервисного хоста. Мы хотим сделать это более динамичным и перенесли все данные, включая конечные точки, контракты и привязки, в БД.

Теперь вопрос в том, как нам получить эти данные и получить к ним надлежащий доступ. У нас есть проект, который работает там, где у нас есть одна определенная конечная точка в файле конфигурации, и, используя эту конечную точку, мы можем вызвать ее, чтобы получить остальную информацию о конечной точке, которая нам нужна (т.е. все привязки, контракты и различные конечные точки, которые он определил в своем app.config). Это касается как клиентской, так и сервисной стороны.

Проблема, с которой я сейчас борюсь, заключается в том, как мне кодировать эти динамические конечные точки? Когда клиент выполняет вызов к узлу службы, он не только делает простые вызовы узлу службы, но и извлекает и передает объекты для обработки узлу службы по мере необходимости. Например, при загрузке формы мы можем извлечь объект со всеми текущими заданными настройками из БД, а затем пользователь делает все, что угодно для fornm, и мы затем возвращаем обновленный объект на сервисный хост. Мы можем сделать это сейчас, потому что в Visual Studio 2008 мы добавили все ссылки на сервисы, которые автоматически генерировали методы и объекты, которые можно вызывать и получать из сервисных хостов. Если мы перейдем к динамическому соединению с конечной точкой, как мы получим эти данные на этапе разработки?

В прошлом я разработал подобное приложение в .NET 2.0, используя удаленное взаимодействие .NET, где мы передавали объект туда-сюда, а клиент и сервер использовали один и тот же класс определения объекта, чтобы узнать об этом объекте. Я не уверен, как мы поступим с WCF.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2008

Определите свою привязку, а затем используйте ее для создания экземпляра клиента.

BasicHttpBinding basic = new BasicHttpBinding(
       BasicHttpSecurityMode.TransportCredentialOnly);
basic.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
EndpointAddress serviceAddress = new EndpointAddress(
       "http://whatever/service.svc");
YourServiceClient m_client = new YourServiceClient(basic, serviceAddress);
0 голосов
/ 01 ноября 2008

Вам не нужно полагаться на файл app.config для настройки службы, вы можете настроить службу во время выполнения, например, получить для привязок, конечных точек или поведения из базы данных для настройки объекта servicehost.

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

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

http://msdn.microsoft.com/en-us/library/aa395208.aspx

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