async public Task <byte[]> RequestResponseAsync(ServiceRemotingMessageHeaders headers, byte[] requestBody) { try { return(await this.wcfClient.Channel.RequestResponseAsync(headers, requestBody).ContinueWith( t => t.GetAwaiter().GetResult(), TaskScheduler.Default)); // the code above (TaskScheduler.Default) for dispatches the responses on different thread // so that if the user code blocks, we do not stop the response receive pump in WCF } catch (FaultException <RemoteExceptionInformation> faultException) { Exception remoteException; if (RemoteExceptionInformation.ToException(faultException.Detail, out remoteException)) { throw new AggregateException(remoteException); } throw new ServiceException(remoteException.GetType().FullName, string.Format( CultureInfo.InvariantCulture, Microsoft.ServiceFabric.Services.Wcf.SR.ErrorDeserializationFailure, remoteException.ToString())); } }
Task <byte[]> IServiceRemotingClient.RequestResponseAsync(ServiceRemotingMessageHeaders messageHeaders, byte[] requestBody) { var header = ServiceRemotingMessageHeaders.Serialize(this.serializer, messageHeaders); return(this.nativeClient.RequestResponseAsync(header, requestBody, this.settings.OperationTimeout).ContinueWith(t => { var retval = t.GetAwaiter().GetResult(); if (retval.IsException) { Exception e; var isDeserialzied = RemoteExceptionInformation.ToException(new RemoteExceptionInformation(retval.GetBody()), out e); if (isDeserialzied) { throw new AggregateException(e); } else { throw new ServiceException(e.GetType().FullName, string.Format( CultureInfo.InvariantCulture, Remoting.SR.ErrorDeserializationFailure, e.ToString())); } } return retval.GetBody(); })); }
Task <byte[]> IServiceRemotingClient.RequestResponseAsync(ServiceRemotingMessageHeaders messageHeaders, byte[] requestBody) { var header = ServiceRemotingMessageHeaders.Serialize(this.serializer, messageHeaders); return(this.nativeClient.RequestResponseAsync(header, requestBody, this.settings.OperationTimeout).ContinueWith(t => { var retval = t.GetAwaiter().GetResult(); if (retval.IsException) { Exception e; var isDeserialzied = RemoteExceptionInformation.ToException(new RemoteExceptionInformation(retval.GetBody()), out e); if (isDeserialzied) { throw new AggregateException(e); } else { throw new ArgumentException(@"failed to deserialize and get remote exception", "remoteExceptionInformation"); } } return retval.GetBody(); })); }
async public Task <byte[]> RequestResponseAsync(ServiceRemotingMessageHeaders headers, byte[] requestBody) { try { return(await this.wcfClient.Channel.RequestResponseAsync(headers, requestBody).ContinueWith( t => t.GetAwaiter().GetResult(), TaskScheduler.Default)); // the code above (TaskScheduler.Default) for dispatches the responses on different thread // so that if the user code blocks, we do not stop the response receive pump in WCF } catch (FaultException <RemoteExceptionInformation> faultException) { Exception remoteException; if (RemoteExceptionInformation.ToException(faultException.Detail, out remoteException)) { throw remoteException; } throw; } }