如何为 StreamWriter 设置超时?

How to set TimeOut For StreamWriter?

我正在使用此代码从服务器接收数据。但我不知道如何为它设置超时。我从 PostInput 模型收到一个字符串:ContentType, Json, WebRequest.

这是我的代码:

public string PostMethod(PostInput Input)
{
    try
    {
        var httpWebRequest = (HttpWebRequest)WebRequest.Create(Input.WebRequest);
        httpWebRequest.ContentType = Input.ContentType;
        httpWebRequest.Method = "POST";                

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {                                        
            streamWriter.Write(Input.Json);
            streamWriter.Flush();
            streamWriter.Close();
        }

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        string result;
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            result = streamReader.ReadToEnd();
        }
        return result;

    }
    catch (Exception ex)
    {
        return string.Empty;
    }
}

您可以使用 HttpWebRequest class 的 Timeout 属性。

像这样的简单代码:

httpWebRequest.ContentType = Input.ContentType;
httpWebRequest.Method = "POST";
httpWebRequest.Timeout= 10000; // 10 seconds

HttpWebRequest.Timeout

谢谢朋友们

我找到了新的方法, 我 ping ip,如果它可用然后调用 StreamWriter

这是我的研究结果:

public string PostMethod(PostInput Input)
    {

        try
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(Input.WebRequest);
            httpWebRequest.ContentType = Input.ContentType;
            httpWebRequest.Method = "POST";

            PingReply Objping = new Ping().Send(IPAddress.Parse(Input.Address), 1000);

            string result;

            if (Objping.Status == IPStatus.Success)
            {
                using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
                {
                    streamWriter.Write(Input.Json);
                    streamWriter.Flush();
                    streamWriter.Close();
                }
                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    result = streamReader.ReadToEnd();
                }
                return result;
            }

            return null;   
        }

你可以像这样尝试使用 WebClinet

 using (WebClient client = new WebClient())
            {
                using (Stream stream = client.OpenWrite(Input.WebRequest.RequestUri))
                using (StreamWriter reader = new StreamWriter(stream))
                {
                    stream.WriteTimeout = 200;

                }
            }