Source/NFX/Glue/Bindings.cs
/// <summary>
/// Dispatches a call allocating new or re-using existing transport if needed. The strategy depends on particular Binding implementation.
/// This call is thread-safe
/// </summary>
Dispatches a call allocating new or re-using existing transport if needed. The strategy depends on particular Binding implementation.
This call is thread-safe
Dispatches a call allocating new or re - using existing transport if needed . The strategy depends on particular Binding implementation . This call is thread - safe
public CallSlot DispatchCall(ClientEndPoint client, RequestMsg request)
            {
              CheckRunningState();
              foreach(var insp in m_ClientMsgInspectors.OrderedValues)
                    request = insp.ClientDispatchCall(client, request);
              request = Glue.ClientDispatchingRequest(client, request);
              CallOptions  options;
              options.DispatchTimeoutMs = client.DispatchTimeoutMs;
              options.TimeoutMs = client.TimeoutMs;
              var reserve = client.ReserveTransport;
              var transport = client.m_ReservedTransport ?? AcquireClientTransportForCall(client, request);
              CallSlot slot = null;
              try
              {
                if (reserve)
                 client.m_ReservedTransport = transport;
                slot = transport.SendRequest(client, request, options);
                if (slot != null)
                  Glue.ClientDispatchedRequest(client, request, slot);
              }
              finally
              {
                if (!reserve)
                  ReleaseClientTransportAfterCall(transport);
              }
              return slot;
            }
public CallSlot DispatchCall ( ClientEndPoint client , RequestMsg request ) { CheckRunningState ( ) ; foreach ( var insp in m_ClientMsgInspectors . OrderedValues ) request = insp . ClientDispatchCall ( client , request ) ; request = Glue . ClientDispatchingRequest ( client , request ) ; CallOptions options ; options . DispatchTimeoutMs = client . DispatchTimeoutMs ; options . TimeoutMs = client . TimeoutMs ; var reserve = client . ReserveTransport ; var transport = client . m_ReservedTransport ?? AcquireClientTransportForCall ( client , request ) ; CallSlot slot = null ; try { if ( reserve ) client . m_ReservedTransport = transport ; slot = transport . SendRequest ( client , request , options ) ; if ( slot != null ) Glue . ClientDispatchedRequest ( client , request , slot ) ; } finally { if ( ! reserve ) ReleaseClientTransportAfterCall ( transport ) ; } return slot ; }
Dispatches a call allocating new or re-using existing transport if needed.
Dispatches a call allocating new or re - using existing transport if needed .
//Binding level inspectors //Glue level inspectors //============================================================== // If execution pauses here and server sends response BEFORE call //then Glue.Deliver response will retry to fimnd the missing call slot for some fixed interval
client
ClientEndPoint
request
RequestMsg