Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用Http POST Url/服务的更快方法_C#_Web Services_Http - Fatal编程技术网

C# 调用Http POST Url/服务的更快方法

C# 调用Http POST Url/服务的更快方法,c#,web-services,http,C#,Web Services,Http,我用这段代码调用我的web服务,它工作得很好。然而,它很慢。 有什么想法或其他方法可以更快地调用web服务吗 WebRequest request = WebRequest.Create("myurl"); request.Method = "POST"; request.Timeout = 5000; request.Proxy = null; string data = string.Format("fromidLinhVuc={0}", 0); request.ContentLength

我用这段代码调用我的web服务,它工作得很好。然而,它很慢。 有什么想法或其他方法可以更快地调用web服务吗

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;

这可能是您的问题,也可能不是,但您需要使用
块:

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
,因此调用方可以使用
块调用
中的此代码,以确保调用了
Dispose

这可能是您的问题,也可能不是,但您需要使用
块调用

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
,因此调用方可以使用
块调用
中的此代码,以确保调用了
Dispose

通过这样或那样调用远程Web服务,无法使其更快。在任何情况下,您都必须等待响应,这超出了您的控制范围。所以这里没有办法

您可以做的是异步调用webservice,以便在等待服务响应时继续。虽然这并不能使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'
...

响应
无关的部分将立即执行,而另一部分将等待
响应
可用

通过这样或那样调用远程Web服务是无法使其更快的。在任何情况下,您都必须等待响应,这超出了您的控制范围。所以这里没有办法

您可以做的是异步调用webservice,以便在等待服务响应时继续。虽然这并不能使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'
...

响应
无关的部分将立即执行,而另一部分将等待
响应
可用

“慢”是指web服务的响应不会很快到达吗?是的,我需要大约2或3秒钟才能从web服务获得响应。如果我使用引用,不知何故它工作得很快。但是我有一些理由不添加引用。您有任何调用web服务的解决方案吗@KeithPaynew你说的“引用”是什么意思?你不能通过不同的调用来修复一个缓慢的web服务。您可以异步调用它,并在等待响应时继续在客户端上执行工作,但您必须为异步操作设计应用程序,使其以这种方式工作。所谓“慢”,是指web服务的响应不会很快到达吗?是,从web服务获得响应大约需要2到3秒钟。如果我使用参考资料,它的工作速度会很快。但是我有一些理由不添加引用。您有任何调用web服务的解决方案吗@KeithPaynew你说的“引用”是什么意思?你不能通过不同的调用来修复一个缓慢的web服务。您可以异步调用它,并在等待响应的同时继续在客户机上执行工作,但必须为异步操作设计应用程序,使其以这种方式工作。