Что такое канал Factory и почему вы его используете?
Что такое канал Factory в .NET?
Ответ 1
Если вы использовали Visual Studio Add Service Reference
или инструмент svcutil.exe
, вы, вероятно, никогда не увидите ChannelFactory.
В принципе, создание прокси-сервера на стороне клиента для службы WCF - это двухэтапный процесс:
- создайте соответствующий
ChannelFactory<T>
для вашего конкретного контракта на обслуживание - учитывая этот канал factory, создайте фактический канал связи между клиентом и службой
Если у вас есть контроль над обоими концами провода, и вы можете заключить контракты на обслуживание и данные в отдельную сборку, вы можете разбить этот двухэтапный процесс и обработать его вручную:
-
создайте
ChannelFactory<IMyService>
один раз, это довольно сложная и трудоемкая операция, поэтому если это вообще возможно, попробуйте сделать это только тогда, когда это действительно необходимо, а затем кешируйте канал factory для последующего повторного использования -
создайте фактический канал, используя канал factory, когда вам нужно связаться с сервером
Это очень специфическая конструкция для служб WCF, поэтому я не думаю, что вы когда-нибудь будете использовать ее за пределами области WCF.
Ответ 2
Класс ChannelFactory используется для создания канала между клиентом и службой без использования прокси. В некоторых случаях у вас может быть служба, тесно связанная с клиентским приложением. В таком случае вы можете напрямую ссылаться на DLL интерфейса и использовать ChannelFactory для вызова ваших методов, использующих это.
Я предлагаю вам также понять разницу между Proxy и Channel factory. это поможет вам понять точное использование Channel Factory.
Ответ 3
У меня есть Unittest, где я хочу протестировать службу Windows. Эта служба Windows содержит ServiceHost. Как мне проверить, работает ли этот ServiceHost и прослушивает ли входящие сообщения?
Я могу создать отдельный клиент для этого, но я хотел интегрированный Unittest, который проверил все это.
У меня уже было 3 таймера в службе Windows. Когда я запускаю Unittest, я проверяю службу Windows, но также могу ли я отправлять сообщения в службу. Для этого Unittest я использую "Канал". Мне не нужно указывать веб-сервис (= прокси).