ChannelFactory.CreateChannel() действительно открывает соединение?
Может быть, это очень отвратительно, но после того, как много гуглил, не смог прийти ни к какому выводу.
Я хочу знать, "действительно ли ChannelFactory.CreateChannel() открывает соединение или оно просто возвращает что-то, и фактическое соединение будет открыто во время вызова метода. Как долго это соединение будет живым, если я его не закрою; не закрываю его".
3 ответа
Хороший вопрос. Когда я задаюсь вопросом о чем-то подобном, я просто читаю исходный код.Net там.
CreateChannel
метод вызывает Open
метод внутренне. Если CommunicationState
не равно Opened
затем Open
метод выполняется с DefaultOpenTimeout
,
DefaultOpenTimeout
настроен конфигурацией привязки конечной точки.
Вы можете увидеть исходный код.
Думаю, вам нужно только создать это:
// Sample service
public class Service : IService
{
public void SendMessage(string message)
{
// do the processing....
}
}
// Creating client connection using factory
// I can't remember the used of my asterisk here but this is use to identity the configuration name used for the endpoint.
var result = new ChannelFactory<IService>("*", new EndpointAddress(serviceAddress));
IService yourService = result.CreateChannel();
// This will automatically open a connection for you.
yourService.SendMessage("It works!");
// Close connection
result.Close();
Просто немного конфигурации моего клиента с несколькими конечными точками:
<client>
<!--note that there is no address on the endpoints as it will be overridden by the app anyway-->
<endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpBinding" behaviorConfiguration="standardBehavior" contract="IService" name="Service"/>
.
.
</client>
Я использовал этот подход к своему клиенту для соединения с более чем 30 службами, размещенными в IIS. Кстати, я просто захватил этот код для моих существующих служб WCF, и фактическая реализация его заключалась в том, что ChannetFactory - это обертка для другого метода, где я мог просто передать свой Сервис как Общий тип и Адрес службы.
Я использовал шаблон сообщения Request Reply и.Net 4.5 здесь.
Соединение открывается только при вызове open() в ChannelFactory. Это демонстрируется в разделе "Примеры" здесь: " https://msdn.microsoft.com/en-us/library/ms575250(v=vs.110).aspx".