首页 新闻 会员 周边

使用HttpWebRequest连接HTTP服务判断是否连通,各种异常啊!

0
悬赏园豆:20 [已解决问题] 解决于 2013-03-26 23:13

public void TryConnectByHttpRequest()

        {
            HttpWebRequest httpReq = null;
            try
            {
                if (!string.IsNullOrEmpty(this.servUrl))
                {
                    string param = "test1=zh-CN&test2=request";
                    byte[] data = Encoding.ASCII.GetBytes(param);
 
                    httpReq = (HttpWebRequest)HttpWebRequest.Create(this.servUrl);
                    httpReq.Method = "POST";//不用Post用Get某些Http服务会报错:远程服务器返回错误: (411) 所需的长度。
                    httpReq.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
                    httpReq.ContentLength = data.Length;
                    //忽略缓存,完全使用服务器满足请求
                    httpReq.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                    //响应延时为4S
                    httpReq.Timeout = 4000;
                    //这个在Post的时候,一定要加上,如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据,做返回数据
                    httpReq.ServicePoint.Expect100Continue = false;
                    httpReq.ServicePoint.ConnectionLimit = 500;
 
                    using (Stream reqStream = httpReq.GetRequestStream())
                    {
                        reqStream.Write(data, 0, data.Length);
                    }
 
                    IAsyncResult result = httpReq.BeginGetResponse(new AsyncCallback(RespCallback), httpReq);
 
                    int DefaultTimeout = 2 * 60 * 1000; // 2 minutes timeout
                    ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), httpReq, DefaultTimeout, true);
                }
            }
            catch (WebException ex)
            {
                FrmMain.Instance.WriteClientLog("尝试连接Web服务出现异常:" + ex.Message);
            }
        }
 
        public void TryConnectByHttpRequestGet()
        {
            HttpWebRequest httpReq = null;
            try
            {
                if (!string.IsNullOrEmpty(this.servUrl))
                {
                    httpReq = (HttpWebRequest)HttpWebRequest.Create(this.servUrl);
                    httpReq.Method = "GET";
                    httpReq.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
                    //忽略缓存,完全使用服务器满足请求
                    httpReq.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                    //响应延时为4S
                    httpReq.Timeout = 4000;
 
                    IAsyncResult result = httpReq.BeginGetResponse(new AsyncCallback(RespCallback), httpReq);
 
                    int DefaultTimeout = 2 * 60 * 1000; // 2 minutes timeout
                    ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), httpReq, DefaultTimeout, true);
                }
            }
            catch (WebException ex)
            {
                FrmMain.Instance.WriteClientLog("尝试连接Web服务出现异常:" + ex.Message);
            }
        }
 
上面写的两个方法分别是用的Post 和Get请求!
 
客户公司提供了HTTP服务
我用Post方法正常连通 Get方法异常:远程服务器返回错误: (411) 所需的长度。
我自己用HttpListener写的Http服务
我用Post方法异常:操作超时 Get方法正常连通。
 
为啥会出现不同的情况啊?还有一般去请求HTTP到底是用Get还是Http啊?
吴顶天的主页 吴顶天 | 初学一级 | 园豆:39
提问于:2013-03-14 14:22
< >
分享
最佳答案
0

从名称上看,大致上,我们通常这样分:如果是从服务器下载数据,一般用GET(获取的意思),如果是从客户端提交数据,一般用POST(提交的意思)

当然,这两者并没有明确的界限。获取数据也可以用POST,提交数据也可以用GET(如果提交的数据为简单数据的话)

收获园豆:20
陈希章 | 老鸟四级 |园豆:2538 | 2013-03-15 07:38
其他回答(1)
0

你可要从服务上获取数据,使用get方法,要制定获取数据的长度,要不然服务器不知道你要获取多少。

LastPc | 园豆:225 (菜鸟二级) | 2013-03-19 10:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册