public void BeginInvoke <TArgs>(string methodName, TArgs args, Action <RpcClientContext> callback) { if (callback == null) { throw new NotSupportedException("callback *MUST NOT* be null!"); } _perfCounters.InvokeTotal.Increment(); _perfCounters.InvokePerSec.Increment(); _perfCounters.ConcurrentContext.Increment(); RpcRequestHeader request = new RpcRequestHeader(); request.FromComputer = ServiceEnviornment.ComputerName; request.FromService = ServiceEnviornment.ServiceName; request.Service = _serviceName; request.Method = methodName; request.ServerUri = _nexus.ServerUri.ToString(); request.ToUri = ObjectHelper.ToString(_toUri); request.HasBody = typeof(TArgs) != typeof(RpcNull) && args != null; IRpcClientTransaction trans = _nexus.CreateTransaction(); RpcClientContext ctx = new RpcClientContext(request, callback, trans, _nexus.ServiceRole); ctx.SendRequest <TArgs>(args, _timeout); }
internal RpcClientContext(RpcRequestHeader request, Action <RpcClientContext> callback, IRpcClientTransaction trans, string serviceRole) { _trans = trans; _request = request; _callback = callback; _serviceUrl = string.Format("{0}/{1}.{2}", request.ServerUri, request.Service, request.Method); _serviceRole = serviceRole; }