Управление часто вызываемым соединением WCF - PullRequest
0 голосов
/ 14 августа 2010

Может быть, я упускаю что-то простое здесь, поэтому, пожалуйста, поправьте меня, если я. У меня есть локальный сервис и приложение WinForms, которые общаются через 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 Ответ

1 голос
/ 14 августа 2010

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

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

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