C# HttpWebRequest POST方法异常

C# HttpWebRequest POST方法异常,c#,c#-4.0,C#,C# 4.0,目前我正在使用下面的方法将xml文件内容发布到extranet网站。我每10秒创建一个新线程来并发发布多个文件 在这种情况下,许多文件都会出现此异常:System.Net.WebException:操作已超时 虽然它抛出了这个异常,但仍然有一些异常文件的内容被发布在网站上 1即使某些文件出现超时异常,请求仍被发布,这是正确的行为吗 2如何处理一些异常文件的内容,而不是其他文件的内容?我如何确保哪些内容没有发布,以便我可以尝试重新发布 欢迎提出其他更好的实施建议 public void SendM

目前我正在使用下面的方法将xml文件内容发布到extranet网站。我每10秒创建一个新线程来并发发布多个文件

在这种情况下,许多文件都会出现此异常:System.Net.WebException:操作已超时

虽然它抛出了这个异常,但仍然有一些异常文件的内容被发布在网站上

1即使某些文件出现超时异常,请求仍被发布,这是正确的行为吗

2如何处理一些异常文件的内容,而不是其他文件的内容?我如何确保哪些内容没有发布,以便我可以尝试重新发布

欢迎提出其他更好的实施建议

public void SendMessage(XmlDocument doc) {
    var httpWReq = (HttpWebRequest)WebRequest.Create(_extranetRemitService);

    httpWReq.Proxy = WebRequest.GetSystemWebProxy();
    httpWReq.Proxy.Credentials = CredentialCache.DefaultCredentials;
    httpWReq.UseDefaultCredentials = true;
    // encode xml file contents (melFileContents is a string)
    var melMessage = doc.InnerXml;
    byte[] data = Encoding.ASCII.GetBytes(melMessage);
    //post the xml data as text/xml content type
    httpWReq.Method = "POST";
    httpWReq.ContentType = "text/xml;charset=utf-8";
    httpWReq.ReadWriteTimeout = -1;
    httpWReq.KeepAlive = false;
    httpWReq.ContentLength = data.Length;
    using (Stream stream = httpWReq.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }
}

谢谢crackhaus和Jim Mischel。以下是工作示例:

public void SendMessage(XmlDocument doc)
    {
        var httpWReq = (HttpWebRequest)WebRequest.Create(_extranetRemitService);
        httpWReq.Proxy = WebRequest.GetSystemWebProxy();
        httpWReq.Proxy.Credentials = CredentialCache.DefaultCredentials;
        httpWReq.UseDefaultCredentials = true;

        // encode xml file contents (melFileContents is a string)
        var melMessage = doc.InnerXml;
        byte[] data = Encoding.ASCII.GetBytes(melMessage);

        //post the xml data as text/xml content type
        httpWReq.Method = "POST";
        httpWReq.ContentType = "text/xml;charset=utf-8";
        httpWReq.ReadWriteTimeout = 10000;
        httpWReq.KeepAlive = false;
        httpWReq.ContentLength = data.Length;
        using (Stream stream = httpWReq.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
            stream.Close();
        }

        var response = (HttpWebResponse)httpWReq.GetResponse();
        response.Close();


    }

您应该尝试使用异步调用。request.BeginGetRequestStreamnew AsyncCallbackGetRequestStreamCallback,请求;还可以尝试增加“Timeout”属性毫秒数。httpWReq.Timeout=10000;这不是一个完整的例子。您从不调用httpWReq.GetResponse,因此您无法知道请求是否发送到服务器,或者服务器是否响应。另外,很可能您不需要Encoding.ASCII.GetBytes,而是需要Encoding.UTF8.GetBytes。