2010-08-13 1 views
0

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

Public Shared Sub MyLocalMethod1() 
    Dim tcpBinding As New NetTcpBinding 
    tcpBinding.SendTimeout = New TimeSpan(0, 0, 5) 

    Dim tcpFactory As ChannelFactory(Of MyWCFClass.MyWCFInterface) = New _ 
         ChannelFactory(Of MyWCFClass.MyWCFInterface)(tcpBinding, "net.tcp://localhost:4079") 

    Dim ServiceWCFConnection As MyWCFClass.MyWCFInterface = tcpFactory.CreateChannel 

    ServiceWCFConnection.MyWCFMethod1() 

    tcpFactory.Close() 

End Sub 

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

ответ

1

Это зависит от ваших потребностей, потому что оба подхода верны. Вы можете превратить код создания канала в некоторого помощника. У вас будет такая же функциональность, как и в настоящий момент, с одним местом для редактирования кода создания канала (принцип DRY). Использование службы происходит медленнее, поскольку каждый вызов создает новое TCP-соединение. Используйте один класс вспомогательных помощников для представления вашего созданного соединения.

Если вы решили использовать один канал (прокси) для всего приложения, вам нужно подумать о новой сложности. Вы используете привязку Net.Tcp, которая создает транспортный сеанс. TCP-соединение будет работать долгое время. Кроме того, экземпляр службы WCF будет работать в то же время, что и соединение, поскольку режим инстанса по умолчанию - PerSession. Таким образом, один экземпляр службы будет обрабатывать все запросы от вашего клиента = ваш сервис станет работоспособным. Также, когда вы используете открытый канал для нескольких вызовов, вам нужно проверить состояние проблемы с каналом - сеть, проблема сервера, тайм-аут или необработанное исключение переключит канал в состояние Faulted - такой канал и соответствующий экземпляр службы больше не могут быть использованы. Вы должны прервать такой канал и открыть новый.

Смежные вопросы