Пример #1
0
        /// <summary>
        /// Starts an asynchronous operation to get keyword rank.
        /// </summary>
        /// <param name="domainName"></param>
        /// <param name="callback"></param>
        /// <param name="userState"></param>
        /// <returns></returns>
        public static IAsyncResult BeginGetKeywordRank(string keyword, string domainName, AsyncCallback callback, object userState)
        {
            HttpWebRequest request = CreateNormalRequest(GetKeywordRankQueryUri(keyword));
            AsyncResult <IEnumerable <int> > result = new AsyncResult <IEnumerable <int> >(callback, userState);

            NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => {
                IEnumerable <int> rank = null;
                Exception error        = null;
                byte[] buffer          = g_bufferManager.TakeBuffer(BUFFER_SIZE);

                try {
                    string content = null;
                    using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) {
                        content = response.GetResponseString(buffer);
                    }

                    rank = ParseKeywordRank(content, domainName);
                } catch (Exception ex) {
                    error = ex;
                } finally {
                    g_bufferManager.ReturnBuffer(buffer);
                }

                result.MarkCompleted(error, false, rank);
            }, request), request, TIMEOUT);

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Starts an asynchronous operation to get web site info.
        /// </summary>
        /// <param name="domainName"></param>
        /// <param name="callback"></param>
        /// <param name="userState"></param>
        /// <returns></returns>
        public static IAsyncResult BeginGetWebSiteInfo(string url, IWebProxy proxy, AsyncCallback callback, object userState)
        {
            HttpWebRequest             request = CreateGetWebSiteInfoRequest(url, proxy);
            AsyncResult <IWebSiteInfo> result  = new AsyncResult <IWebSiteInfo>(callback, userState);

            NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => {
                IWebSiteInfo info = null;
                Exception error   = null;
                byte[] buffer     = g_bufferManager.TakeBuffer(BUFFER_SIZE);

                try {
                    string content = null;
                    using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) {
                        content = response.GetResponseString(buffer);
                        info    = ParseWebSiteInfo(url, response, content);
                    }
                } catch (Exception ex) {
                    error = ex;
                } finally {
                    g_bufferManager.ReturnBuffer(buffer);
                }

                result.MarkCompleted(error, false, info);
            }, request), request, TIMEOUT);

            return(result);
        }
Пример #3
0
        /// <summary>
        /// Starts an asynchronous operation to get include info.
        /// </summary>
        /// <param name="domainName"></param>
        /// <param name="callback"></param>
        /// <param name="userState"></param>
        /// <returns></returns>
        public static IAsyncResult BeginGetIncludeInfo(string domainName, AsyncCallback callback, object userState)
        {
            HttpWebRequest request = CreateNormalRequest(GetIncludeInfoQueryUri(domainName));
            AsyncResult <IHaosouIncludeInfo> result = new AsyncResult <IHaosouIncludeInfo>(callback, userState);

            NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => {
                IHaosouIncludeInfo info = null;
                Exception error         = null;
                byte[] buffer           = g_bufferManager.TakeBuffer(BUFFER_SIZE);

                try {
                    string content = null;
                    using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) {
                        content = response.GetResponseString(buffer);
                    }

                    info = new IncludeInfo {
                        IncludeCount = ParseIncludeCount(content),
                    };
                } catch (Exception ex) {
                    error = ex;
                } finally {
                    g_bufferManager.ReturnBuffer(buffer);
                }

                result.MarkCompleted(error, false, info);
            }, request), request, TIMEOUT);

            return(result);
        }
        private void SendPostRequest <TReturn>(string url, object obj, Action <Exception, TReturn> callback) where TReturn : IWeChatReturnValue
        {
            byte[]         data      = Encoding.UTF8.GetBytes(obj is string?(string)obj: this.m_jsonSerializer.Serialize(obj));
            HttpWebRequest request   = this.CreateRequest(url, "application/json", WebRequestMethods.Http.Post);
            Exception      syncError = null;

            try {
                request.ContentLength = data.Length;
                NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetRequestStream((ar) => {
                    try {
                        using (Stream writer = ((HttpWebRequest)ar.AsyncState).EndGetRequestStream(ar)) {
                            writer.Write(data, 0, data.Length);
                        }
                    } catch (Exception ex) {
                        callback(ex, default(TReturn));
                        return;
                    }

                    this.SendHttpRequest <TReturn>((HttpWebRequest)ar.AsyncState, callback);
                }, request), request, this.m_timeout);
            } catch (Exception ex) {
                syncError = ex;
            }

            if (syncError != null)
            {
                callback(syncError, default(TReturn));
            }
        }
Пример #5
0
        /// <summary>
        /// Starts an asynchronous operation to push urls to baidu.com.
        /// </summary>
        /// <param name="site"></param>
        /// <param name="token"></param>
        /// <param name="urls"></param>
        /// <param name="callback"></param>
        /// <param name="userState"></param>
        /// <returns></returns>
        public static IAsyncResult BeginPush(string site, string token, bool isOriginal, IEnumerable <string> urls, AsyncCallback callback, object userState)
        {
            HttpWebRequest request = CreatePushRequest(site, token, isOriginal);
            AsyncResult <IBaiduPushResult> result = new AsyncResult <IBaiduPushResult>(callback, userState);

            byte[] data = Encoding.UTF8.GetBytes(urls.StringJoin("\r\n"));
            request.ContentLength = data.Length;
            NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetRequestStream((streamResult) => {
                try {
                    using (Stream writer = ((HttpWebRequest)streamResult.AsyncState).EndGetRequestStream(streamResult)) {
                        writer.Write(data, 0, data.Length);
                    }
                } catch (Exception ex) {
                    result.MarkCompleted(ex, false, null);
                    return;
                }

                NetworkRequestAsyncTimeout.RegisterRequest(((HttpWebRequest)streamResult.AsyncState).BeginGetResponse((contentResult) => {
                    string content        = null;
                    Exception error       = null;
                    PushResult pushResult = null;
                    byte[] buffer         = g_bufferManager.TakeBuffer(BUFFER_SIZE);

                    try {
                        using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)contentResult.AsyncState).EndGetResponse(contentResult)) {
                            if (!string.IsNullOrWhiteSpace(content = response.GetResponseString(buffer)))
                            {
                                pushResult = new JavaScriptSerializer().Deserialize <PushResult>(content);
                            }
                        }
                    } catch (WebException ex) {
                        try {
                            using (HttpWebResponse response = (HttpWebResponse)ex.Response) {
                                if (response != null)
                                {
                                    if (!string.IsNullOrWhiteSpace(content = response.GetResponseString(buffer)))
                                    {
                                        pushResult = new JavaScriptSerializer().Deserialize <PushResult>(content);
                                    }
                                }
                                else
                                {
                                    error = ex;
                                }
                            }
                        } catch {
                            error = ex;
                        }
                    } catch (Exception ex) {
                        error = ex;
                    } finally {
                        g_bufferManager.ReturnBuffer(buffer);
                    }

                    result.MarkCompleted(error, false, pushResult);
                }, request), request, TIMEOUT);
            }, request), request, TIMEOUT);

            return(result);
        }
        public void RegisterTest_WebRequest()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:44444/test.jpg");

            request.Method = WebRequestMethods.Http.Get;

            NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse(null, null), request, 1);
        }
        public void RegisterConnect_TcpClient()
        {
            Exception error  = null;
            TcpClient client = new TcpClient(AddressFamily.InterNetwork);

            NetworkRequestAsyncTimeout.RegisterConnect(client.BeginConnect(IPAddress.Parse("192.168.1.222"), 44444, (ar) => {
                try {
                    client.EndConnect(ar);
                } catch (Exception ex) {
                    error = ex;
                }
            }, null), client, 1000);

            Thread.Sleep(30000);

            Assert.IsNotNull(error);
        }
        public void RegisterConnect_Socket()
        {
            Exception error  = null;
            Socket    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            NetworkRequestAsyncTimeout.RegisterConnect(socket.BeginConnect(new IPEndPoint(IPAddress.Parse("192.168.1.222"), 44444), (ar) => {
                try {
                    socket.EndConnect(ar);
                } catch (Exception ex) {
                    error = ex;
                }
            }, null), socket, 10000);

            Thread.Sleep(30000);

            Assert.IsNotNull(error);
        }
        private void SendHttpRequest <TReturn>(HttpWebRequest request, Action <Exception, TReturn> callback) where TReturn : IWeChatReturnValue
        {
            Exception syncError = null;

            try {
                NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => {
                    string content  = null;
                    Exception error = null;
                    byte[] buffer   = this.m_bufferManager.TakeBuffer(BUFFER_POOL_ITEM_SIZE);

                    try {
                        using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) {
                            content = response.GetResponseString(Encoding.UTF8, buffer);
                        }
                    } catch (Exception ex) {
                        error = ex;
                    } finally {
                        this.m_bufferManager.ReturnBuffer(buffer);
                    }

                    TReturn value = default(TReturn);
                    if (error == null)
                    {
                        try {
                            value = WeChatReturnValue.Create <TReturn>(content);
                            error = this.DetectWeChatException(value);
                        } catch (Exception ex) {
                            error = ex;
                        }
                    }

                    callback(error, value);
                }, request), request, this.m_timeout);
            } catch (Exception ex) {
                syncError = ex;
            }

            if (syncError != null)
            {
                callback(syncError, default(TReturn));
            }
        }
Пример #10
0
        /// <summary>
        /// Begins an asynchronous operation to invoke the update notification service of baidu.com(Baidu PING).
        /// </summary>
        /// <param name="siteName"></param>
        /// <param name="homepageUri"></param>
        /// <param name="articleUri"></param>
        /// <param name="rssUri"></param>
        /// <param name="callback"></param>
        /// <param name="userState"></param>
        /// <returns></returns>
        public static IAsyncResult BeginPing(string siteName, string homepageUri, string articleUri, string rssUri, AsyncCallback callback, object userState)
        {
            HttpWebRequest     request = CreatePingRequest();
            AsyncResult <bool> result  = new AsyncResult <bool>(callback, userState);

            byte[] data = Encoding.UTF8.GetBytes(string.Format(g_pingRequestFormat, siteName, homepageUri, articleUri, rssUri));
            request.ContentLength = data.Length;
            NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetRequestStream((streamResult) => {
                try {
                    using (Stream writer = ((HttpWebRequest)streamResult.AsyncState).EndGetRequestStream(streamResult)) {
                        writer.Write(data, 0, data.Length);
                    }
                } catch (WebException) {
                    result.MarkCompleted(null, false, false);
                    return;
                } catch (Exception ex) {
                    result.MarkCompleted(ex, false, false);
                    return;
                }

                NetworkRequestAsyncTimeout.RegisterRequest(((HttpWebRequest)streamResult.AsyncState).BeginGetResponse((contentResult) => {
                    string content  = null;
                    Exception error = null;
                    byte[] buffer   = g_bufferManager.TakeBuffer(BUFFER_SIZE);

                    try {
                        using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)contentResult.AsyncState).EndGetResponse(contentResult)) {
                            content = response.GetResponseString(buffer);
                        }
                    } catch (WebException) {
                    } catch (Exception ex) {
                        error = ex;
                    } finally {
                        g_bufferManager.ReturnBuffer(buffer);
                    }

                    result.MarkCompleted(error, false, !string.IsNullOrWhiteSpace(content) && content.Contains("<int>0</int>"));
                }, request), request, TIMEOUT);
            }, request), request, TIMEOUT);

            return(result);
        }
Пример #11
0
        private void SendHttpRequest(HttpWebRequest request, Action <Exception, string> callback)
        {
            NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => {
                string content  = null;
                Exception error = null;
                byte[] buffer   = this.m_bufferManager.TakeBuffer(BUFFER_POOL_ITEM_SIZE);

                try {
                    using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar)) {
                        content = response.GetResponseString(buffer);
                    }
                } catch (WebException ex) {
                    error = this.GetAlibabaException(ex);
                } catch (Exception ex) {
                    error = new AlibabaException(string.Format("Error occurred when send HTTP request: {0}", ex.Message), 500, ex);
                } finally {
                    this.m_bufferManager.ReturnBuffer(buffer);
                }

                callback(error, content);
            }, null), request, this.m_timeout);
        }
Пример #12
0
        private void SendPostRequest(string url, IDictionary <string, string> args, Encoding encoding, Action <Exception, string> callback)
        {
            HttpWebRequest request     = this.CreateRequest(url, WebRequestMethods.Http.Post, encoding);
            string         queryString = AlibabaHelper.GetQueryString(args, encoding ?? this.m_defaultEncoding);

            byte[] data = queryString.Length > 0 ? (encoding ?? this.m_defaultEncoding).GetBytes(queryString) : null;

            if (data != null)
            {
                request.ContentLength = data.Length;
                NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetRequestStream((ar) => {
                    Exception error = null;

                    try {
                        using (Stream writer = request.EndGetRequestStream(ar)) {
                            writer.Write(data, 0, data.Length);
                        }
                    } catch (WebException ex) {
                        error = this.GetAlibabaException(ex);
                    } catch (Exception ex) {
                        error = new AlibabaException(string.Format("Error occurred when send POST data: {0}", ex.Message), 500, ex);
                    }

                    if (error != null)
                    {
                        callback(error, null);
                    }
                    else
                    {
                        this.SendHttpRequest(request, callback);
                    }
                }, null), request, this.m_timeout);
            }
            else
            {
                this.SendHttpRequest(request, callback);
            }
        }