2014-01-08 39 views
0

我用這段代碼調用我的Web服務,它運行良好。但是,這很慢。 任何想法或其他方式來更快地調用Web服務?更快的方式來調用一個Http POST Url /服務

WebRequest request = WebRequest.Create("myurl"); 
request.Method = "POST"; 
request.Timeout = 5000; 
request.Proxy = null; 
string data = string.Format("fromidLinhVuc={0}", 0); 
request.ContentLength = data.Length; 
request.ContentType = "application/x-www-form-urlencoded"; 
var dataStream = new StreamWriter(request.GetRequestStream()); 
dataStream.Write(data); 
dataStream.Close(); 
WebResponse response = request.GetResponse(); 
return response; 
+2

慢,你的意思是從Web服務的響應不會很快到來? –

+0

是的,它需要大約2或3秒才能從Web服務獲得響應。如果我使用引用,它會以某種方式快速運行。但我有一些理由不添加引用 – Vinh

+0

你有任何解決方案來調用Web服務? @KeithPayne – Vinh

回答

2

這可能是也可能不是你的問題,但你需要一個using塊:

WebRequest request = WebRequest.Create("myurl"); 
request.Method = "POST"; 
request.Timeout = 5000; 
request.Proxy = null; 
string data = string.Format("fromidLinhVuc={0}", 0); 
request.ContentLength = data.Length; 
request.ContentType = "application/x-www-form-urlencoded"; 
using (var dataStream = new StreamWriter(request.GetRequestStream())) 
{ 
    dataStream.Write(data); 
} 
WebResponse response = request.GetResponse(); 
return response; 

由於此代碼返回一個WebResponse,它實現IDisposable,它是由主叫方呼叫此代碼在using塊中,以確保調用Dispose

+0

謝謝,我會添加它。 – Vinh

2

您不能通過這種方式或以這種方式調用遠程Web服務。無論如何,你必須等待迴應,這是你無法控制的。所以沒辦法。

可以在你身邊做,是異步調用web服務,以便能夠在等待服務的響應時繼續。儘管不完全使得web服務速度更快,這是非常有利的,這取決於你的具體情況,實際上給人的印象是事情走得更快:

public async GetMyResponseAsync() 
{ 
    WebRequest request = WebRequest.Create("myurl"); 
    request.Method = "POST"; 
    request.Timeout = 5000; 
    request.Proxy = null; 
    string data = string.Format("fromidLinhVuc={0}", 0); 
    request.ContentLength = data.Length; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    var dataStream = new StreamWriter(request.GetRequestStream()); 
    dataStream.Write(data); 
    dataStream.Close(); 
    WebResponse response = await request.GetResponseAsync(); 

    return response; 
} 

然後在你的調用代碼你可能做某事。這樣

... 
// Do stuff 
var response = GetMyResponseAsync(); 
// Do more stuff unrelated to 'response' 
// Do stuff with 'response' 
... 

的部分無關response會立即執行,而另一部分將等到response可用...