Esempio n. 1
0
             public Task <Example.Service.Thrift.User> GetUser(System.Int32 userId, object asyncState = null)
            {
                var taskSource_ = new TaskCompletionSource <Example.Service.Thrift.User>(asyncState);

                //构建请求发送buffer
                int seqID_      = this.client_.NextRequestSeqID();
                var sendBuffer_ = ThriftMarshaller.Serialize(new TMessage("GetUser", TMessageType.Call, seqID_),
                                                             new Service1.GetUser_args()
                {
                    UserId = userId
                });

                //开始异步发送
                this.client_.Send("Example.Service.Thrift.Service1+Iface", "GetUser", seqID_, sendBuffer_, (ex_) =>
                {
                    //处理异常回调
                    taskSource_.SetException(ex_);
                },
                                  (payload_) =>
                {
                    if (payload_ == null || payload_.Length == 0)
                    {
                        taskSource_.SetException(new TApplicationException(
                                                     TApplicationException.ExceptionType.MissingResult, "GetUser failed: Did not receive any data."));
                        return;
                    }

                    TMessage recvMsg_;
                    TApplicationException exServer_ = null;
                    Service1.GetUser_result result_ = null;

                    var oproto_ = ThriftMarshaller.GetBinaryProtocol(payload_);
                    try
                    {
                        //read TMessage
                        recvMsg_ = oproto_.ReadMessageBegin();
                        //read server return exception
                        if (recvMsg_.Type == TMessageType.Exception)
                        {
                            exServer_ = TApplicationException.Read(oproto_);
                        }
                        else
                        {
                            //read result
                            result_ = new Service1.GetUser_result();
                            result_.Read(oproto_);
                        }
                    }
                    catch (System.Exception ex_)
                    {
                        oproto_.Transport.Close();
                        taskSource_.SetException(ex_);
                        return;
                    }
                    oproto_.Transport.Close();

                    if (exServer_ != null)
                    {
                        taskSource_.SetException(exServer_);
                    }
                    else
                    {
                        if (result_.__isset.success)
                        {
                            taskSource_.SetResult(result_.Success);
                            return;
                        }
                        if (result_.__isset.ex)
                        {
                            taskSource_.SetException(result_.Ex);
                            return;
                        }

                        taskSource_.SetException(new TApplicationException(
                                                     TApplicationException.ExceptionType.MissingResult, "GetUser failed: unknown result"));
                    }
                });

                return(taskSource_.Task);
            }
Esempio n. 2
0
            public Task<Example.Service.Thrift.User> GetUser(System.Int32 userId, object asyncState = null)
            {
                var taskSource_ = new TaskCompletionSource<Example.Service.Thrift.User>(asyncState);

                //构建请求发送buffer
                int seqID_ = this.client_.NextRequestSeqID();
                var sendBuffer_ = ThriftMarshaller.Serialize(new TMessage("GetUser", TMessageType.Call, seqID_),
                    new Service1.GetUser_args()
                    {
                        UserId = userId
                    });

                //开始异步发送
                this.client_.Send("Example.Service.Thrift.Service1+Iface", "GetUser", seqID_, sendBuffer_, (ex_) =>
                {
                    //处理异常回调
                    taskSource_.SetException(ex_);
                },
                (payload_) =>
                {
                    if (payload_ == null || payload_.Length == 0)
                    {
                        taskSource_.SetException(new TApplicationException(
                            TApplicationException.ExceptionType.MissingResult, "GetUser failed: Did not receive any data."));
                        return;
                    }

                    TMessage recvMsg_;
                    TApplicationException exServer_ = null;
                    Service1.GetUser_result result_ = null;

                    var oproto_ = ThriftMarshaller.GetBinaryProtocol(payload_);
                    try
                    {
                        //read TMessage
                        recvMsg_ = oproto_.ReadMessageBegin();
                        //read server return exception
                        if (recvMsg_.Type == TMessageType.Exception)
                            exServer_ = TApplicationException.Read(oproto_);
                        else
                        {
                            //read result
                            result_ = new Service1.GetUser_result();
                            result_.Read(oproto_);
                        }
                    }
                    catch (System.Exception ex_)
                    {
                        oproto_.Transport.Close();
                        taskSource_.SetException(ex_);
                        return;
                    }
                    oproto_.Transport.Close();

                    if (exServer_ != null)
                        taskSource_.SetException(exServer_);
                    else
                    {
                        if (result_.__isset.success)
                        {
                            taskSource_.SetResult(result_.Success);
                            return;
                        }
						if (result_.__isset.ex) {
taskSource_.SetException(result_.Ex);
return;
}

                        taskSource_.SetException(new TApplicationException(
                            TApplicationException.ExceptionType.MissingResult, "GetUser failed: unknown result"));
                    }
                });

                return taskSource_.Task;
            }