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".

Другие вопросы по тегам