WCF еще одна лучшая практика? - PullRequest
0 голосов
/ 05 марта 2012

Хорошо, так что я построил свой сервис WCF и он отлично функционирует! Тем не менее, сейчас я начинаю внедрять его в нашу уже существующую часть программного обеспечения и сразу же задаюсь вопросом: использовать ли только код, сгенерированный прокси-сервером, и избавиться от dll, который я использовал изначально? Или я оставляю оба, и делаю различия между двумя очень очевидными?

Под разграничением я подразумеваю свойство ServerUser и LocalUser, которые представляют один и тот же объект пользователя. Однако мое свойство LocalUser будет заполнено через dll, с которым приложение изначально запускалось, если служба приложения недоступна.

Моя основная причина этого мышления заключается в том, что если я удалю свою DLL, у меня будет единственная точка отказа. Если по какой-то причине мой ServiceHost просто не запущен, а сервер БД есть, я бы хотел, чтобы мои пользователи все еще могли выполнять свою работу. Функции, которые использует новая реализация WCF, не зависят от выполнения сотрудниками своей работы. Больше удобства в том, что предоставляет сервис WCF. Кроме того, построение такой логики для Сервиса позволило бы модифицировать сервисы более легко в среде, не размещенной в IIS.

Кроме того, есть ли способ встроить логику в службу, чтобы при извлечении прокси-кода для клиента, который просто знает, что он обращается к БД вручную, если ServiceHost недоступен? Если бы это было возможно, я думаю, что около 90% всех моих проблем исчезли бы.

Заранее спасибо!

1 Ответ

1 голос
/ 05 марта 2012

Из того, что вы описываете, звучит так, будто сохранение вашей существующей DLL, т. Е. Прямой доступ к БД, лучше всего соответствует вашим потребностям.Наличие службы WCF ничего не добавляет, если в случае сбоя вы все равно просто используете DLL.

В идеале вы бы полностью воспользовались услугой WCF и предложили бы какую-то избыточность для решения любых возможных проблем с обслуживанием.Кроме того, использование службы будет означать, что вам не придется иметь дело с какими-либо обновлениями / развертываниями DLL.

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

РЕДАКТИРОВАТЬ: Просто прочитайте последнюю часть вашего вопроса, и я не думаю, что это возможно.Код прокси для доступа к сервисам генерируется при добавлении ссылки на ваш проект.Вид «динамической» информации, которая вам нужна, на самом деле требует службы.

РЕДАКТИРОВАТЬ: Как продолжение моего комментария ниже, вы можете проверить это, создав DLL и класс, назовем его Class1.Затем создайте службу WCF с методом, который будет возвращать Class1.Создайте клиентское приложение и добавьте ссылку на сервис.Если вы посмотрите на код, сгенерированный прокси, то увидите (надеюсь ... я думаю об этом, когда набираю :)), что метод возвращает Class1, но при компиляции он не сможет найти Class1.Это связано с тем, что Class1 не имеет DataContractAttribute, который автоматически генерировал бы Class1 на клиенте.Итак, вы должны распространять совместно используемую DLL клиенту.Теперь, когда метод возвращается и WCF пытается воссоздать Class1, он будет использовать локальную версию в общей DLL.Ваша другая DLL, которая уже будет на клиенте, будет использовать ту же общую DLL.

...