示例#1
0
        private void HandleException <T>(AsyncStreamSetInfo <T> asyncStreamSetInfo, Exception e)
        {
            String error = e.Message;

#if (!UNIVERSALW8 && !FULL_BUILD && !WINDOWS_PHONE && !PURE_CLIENT_LIB && !WINDOWS_PHONE8)
            if (e is SecurityException)
            {
                if (WeborbClient.Uri.Scheme.ToLower().StartsWith("file"))
                {
                    error = SECURITY_FAULT_MESSAGE;
                }
            }

            if (UiControl != null)
            {
                UiControl.Dispatcher.BeginInvoke(delegate()
                {
                    HtmlPage.Window.Alert(error);
                });
            }
#endif
            if (asyncStreamSetInfo != null)
            {
                Fault fault = new Fault(error, e.StackTrace, INTERNAL_CLIENT_EXCEPTION_FAULT_CODE);
                if (asyncStreamSetInfo.responder != null)
                {
                    if (e is WebException && ((WebException)e).Status == WebExceptionStatus.RequestCanceled)
                    {
                        fault = new Fault(TIMEOUT_FAULT_MESSAGE, TIMEOUT_FAULT_MESSAGE);
                    }
                    asyncStreamSetInfo.responder.ErrorHandler(fault);
                }
            }
        }
示例#2
0
        public void Invoke <T>(String className, String methodName, Object[] args, IDictionary httpRequestHeaders, IDictionary messageHeaders, Responder <T> responder, ResponseThreadConfigurator responseThreadConfigurator)
        {
            AsyncStreamSetInfo <T> asyncStreamSetInfo = new AsyncStreamSetInfo <T>();

            asyncStreamSetInfo.responseThreadConfigurator = responseThreadConfigurator;
            _engine.Invoke(className, methodName, args, null, messageHeaders, httpRequestHeaders, responder, asyncStreamSetInfo);
        }
示例#3
0
        private void ProcessAMFResponse <T>(IAsyncResult asyncResult)
        {
            try
            {
                AsyncStreamSetInfo <T> asyncStreamSetInfo = (AsyncStreamSetInfo <T>)asyncResult.AsyncState;

                if (asyncStreamSetInfo.responseThreadConfigurator != null)
                {
                    asyncStreamSetInfo.responseThreadConfigurator();
                }

                HttpWebRequest  request  = asyncStreamSetInfo.request;
                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);

                if (Cookies != null)
                {
                    foreach (Cookie cookie in response.Cookies)
                    {
                        Cookies.Add(new Uri(GatewayUrl), cookie);
                    }
                }

                Stream        streamResponse = response.GetResponseStream();
                long          curTime        = DateTime.Now.Ticks;
                long          roundTrip      = (curTime - asyncStreamSetInfo.messageSentTime) / TimeSpan.TicksPerMillisecond;
                RequestParser parser         = new RequestParser();
                Request       responseObject = parser.readMessage(streamResponse);
                object[]      responseData   = (object[])responseObject.getRequestBodyData();
                V3Message     v3             = (V3Message)((IAdaptingType)responseData[0]).defaultAdapt();

                if (v3.isError)
                {
                    ErrMessage errorMessage = (ErrMessage)v3;
                    Fault      fault        = new Fault(errorMessage.faultString, errorMessage.faultDetail, errorMessage.faultCode);

                    if (asyncStreamSetInfo.responder != null)
                    {
                        asyncStreamSetInfo.responder.ErrorHandler(fault);
                    }

                    return;
                }

                IAdaptingType body   = (IAdaptingType)((AnonymousObject)((NamedObject)responseData[0]).TypedObject).Properties["body"];
                T             result = (T)body.adapt(typeof(T));

                if (asyncStreamSetInfo.responder != null)
                {
                    asyncStreamSetInfo.responder.ResponseHandler(result);
                }

                //  ProcessV3Message( v3, asyncStreamSetInfo.responder );
            }
            catch (Exception e)
            {
                AsyncStreamSetInfo <T> asyncStreamSetInfo = (AsyncStreamSetInfo <T>)asyncResult.AsyncState;
                ProccessException(e, asyncStreamSetInfo.responder);
            }
        }
示例#4
0
 public override void SendRequest <T>(V3Message v3Msg,
                                      IDictionary requestHeaders,
                                      IDictionary httpHeaders,
                                      Responder <T> responder,
                                      AsyncStreamSetInfo <T> asyncStreamSetInfo)
 {
     ThreadPool.QueueUserWorkItem(state => SendHttpRequest(v3Msg, requestHeaders, httpHeaders, responder, asyncStreamSetInfo));
 }
示例#5
0
 internal override void Invoke <T>(string className,
                                   string methodName,
                                   object[] args,
                                   IDictionary requestHeaders,
                                   IDictionary messageHeaders,
                                   IDictionary httpHeaders,
                                   Responder <T> responder,
                                   AsyncStreamSetInfo <T> asyncStreamSetInfo)
 {
     SendRequest(CreateMessageForInvocation(className, methodName, args, messageHeaders), requestHeaders, httpHeaders, responder, asyncStreamSetInfo);
 }
示例#6
0
 public abstract void SendRequest <T>(V3Message v3Msg, IDictionary requestHeaders, IDictionary httpHeaders, Responder <T> responder, AsyncStreamSetInfo <T> asyncStreamSetInfo);
示例#7
0
 internal abstract void Invoke <T>(string className, string methodName, object[] args, IDictionary requestHeaders, IDictionary messageHeaders, IDictionary httpHeaders, Responder <T> responder, AsyncStreamSetInfo <T> asyncStreamSetInfo);
示例#8
0
 internal void Invoke <T>(String className, String methodName, Object[] args, IDictionary requestHeaders, IDictionary messageHeaders, Responder <T> responder, AsyncStreamSetInfo <T> asyncStreamSetInfo)
 {
     _engine.Invoke(className, methodName, args, requestHeaders, messageHeaders, null, responder, asyncStreamSetInfo);
 }
示例#9
0
        private void SendHttpRequest <T>(V3Message v3Msg, IDictionary requestHeaders, IDictionary httpHeaders, Responder <T> responder, AsyncStreamSetInfo <T> asyncStreamSetInfo)
        {
            HttpWebRequest webReq;

            try
            {
                webReq = GetWebRequest();
            }
            catch (Exception e)
            {
                HandleException(asyncStreamSetInfo, e);
                return;
            }

            if (httpHeaders != null)
            {
                foreach (DictionaryEntry header in httpHeaders)
                {
                    webReq.Headers[header.Key.ToString()] = header.Value.ToString();
                }
            }

            webReq.CookieContainer = Cookies;

            byte[] requestBytes = CreateRequest(v3Msg, requestHeaders);

            asyncStreamSetInfo.requestBytes = requestBytes;
            asyncStreamSetInfo.request      = webReq;
            asyncStreamSetInfo.responder    = responder;

            // Set the ContentType property.
            webReq.ContentType = "application/x-amf";
            // Set the Method property to 'POST' to post data to the URI.
            webReq.Method = "POST";
            // Start the asynchronous operation.

            try
            {
                webReq.BeginGetRequestStream(new AsyncCallback(SetStreamDataCallback <T>), asyncStreamSetInfo);
            }
            catch (Exception e1)
            {
                HandleException(asyncStreamSetInfo, e1);
            }
        }
示例#10
0
        private void SetStreamDataCallback <T>(IAsyncResult asynchronousResult)
        {
            AsyncStreamSetInfo <T> asyncStreamSetInfo = (AsyncStreamSetInfo <T>)asynchronousResult.AsyncState;

            try
            {
                HttpWebRequest request = asyncStreamSetInfo.request;
                // End the operation.
                Stream postStream = request.EndGetRequestStream(asynchronousResult);
                postStream.Write(asyncStreamSetInfo.requestBytes, 0, asyncStreamSetInfo.requestBytes.Length);
                postStream.Flush();
                postStream.Close();
                asyncStreamSetInfo.messageSentTime = DateTime.Now.Ticks;
                request.BeginGetResponse(new AsyncCallback(ProcessAMFResponse <T>), asyncStreamSetInfo);
                if (Timeout > 0)
                {
                    Timer timer = new Timer(state =>
                    {
                        if (!request.HaveResponse)
                        {
                            request.Abort();
                        }
                    });
                    timer.Change(Timeout, System.Threading.Timeout.Infinite);
                }
                // allDone.Set();
            }
            catch (Exception exception)
            {
                String error = exception.Message;
                if (exception is WebException && ((WebException)exception).Status == WebExceptionStatus.RequestCanceled)
                {
                    error = TIMEOUT_FAULT_MESSAGE;
                }

#if (!UNIVERSALW8 && !FULL_BUILD && !WINDOWS_PHONE && !PURE_CLIENT_LIB && !WINDOWS_PHONE8)
                if (exception is SecurityException)
                {
                    if (WeborbClient.Uri.Scheme.ToLower().StartsWith("file"))
                    {
                        error = SECURITY_FAULT_MESSAGE;
                    }
                }

                if (UiControl != null)
                {
                    UiControl.Dispatcher.BeginInvoke(delegate()
                    {
                        HtmlPage.Window.Alert(error);
                    });
                }
#endif
                if (asyncStreamSetInfo != null)
                {
                    Fault fault = new Fault(error, exception.StackTrace, INTERNAL_CLIENT_EXCEPTION_FAULT_CODE);
                    if (asyncStreamSetInfo.responder != null)
                    {
                        asyncStreamSetInfo.responder.ErrorHandler(fault);
                    }
                }
            }
        }