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啊?
使用HttpWebRequest連接HTTP服務判斷是否連通,各種異常?。?/h1>
- 2 回答
- 0 關注
- 687 瀏覽
添加回答
舉報
0/150
提交
取消