WCF ChannelFactory против генератора прокси


Answers

Я использую ChannelFactory вместе с методом MetadataResolver.Resolve. Конфигурация клиента беспокоит, поэтому я получаю свою службу ServiceEndpoint с сервера.

Когда вы используете ChannelFactory (Of T), T является либо исходным контрактом, который вы можете получить из ссылки в вашем проекте или сгенерированном экземпляре контракта. В некоторых проектах я сгенерировал код из Service Reference, потому что я не мог добавить ссылку на dll контракта. Вы даже можете создать асинхронный контракт с ссылкой на службу и использовать этот контрактный интерфейс с ChannelFactory.

Основной момент использования ChannelFactory для меня состоял в том, чтобы избавиться от информации о конфигурации клиента WCF. В приведенном ниже примере кода вы можете увидеть, как достичь WCF-клиента без конфигурации.

Dim fixedAddress = "net.tcp://server/service.svc/mex"
Dim availableBindings = MetadataResolver.Resolve(GetType(ContractAssembly.IContractName), New EndpointAddress(fixedAddress))
factoryService = New ChannelFactory(Of ContractAssembly.IContractName)(availableBindings(0))
accesService = factoryService.CreateChannel()

В моем окончательном проекте доступные правила проверяются на использование net.tcp или net.pipe, если они доступны. Таким образом, я могу использовать лучшее доступное связывание для моих нужд. Я полагаюсь только на то, что на сервере существует конечная точка метаданных.

надеюсь, это поможет

BTW, это делается с помощью .NET 3.5. Однако он работает и с 4.0.

Question

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

Таким образом вам не придется генерировать прокси-сервер и беспокоиться о восстановлении прокси-сервера при обновлении сервера?

благодаря




Это не просто вопрос времени. Использование созданного WSDL-прокси опасно, потому что если вы забудете обновить ссылку на службу, вы можете оставить решение в противоречивом состоянии. Все компилируется, но контракт на обслуживание нарушен. Я определенно предлагаю использовать ChannelFactory, когда это возможно, вы делаете свою жизнь намного проще.

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




Прокси-сервер будет строить асинхронные функции, для которых это хорошо.




Related