Saber Motamedi
Saber Motamedi

Reputation: 439

How to set TimeOut For StreamWriter?

I am using this code to receive data from Server. But I don't know how to set timeout for it. I receive a string from PostInput Model: ContentType, Json, WebRequest.

And this is my code:

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;
    }
}

Upvotes: 0

Views: 2506

Answers (3)

Saber Motamedi
Saber Motamedi

Reputation: 439

tnks friends

i found new way, i ping the ip and if it available Then calling StreamWriter

this Is my Reaserch Result:

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;   
        }

Upvotes: 1

styx
styx

Reputation: 1925

you can try an consider using WebClinet like so

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

                }
            }

Upvotes: 2

D-Shih
D-Shih

Reputation: 46249

You might use HttpWebRequest class's Timeout property.

Simple code like:

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

HttpWebRequest.Timeout

Upvotes: 1

Related Questions