Streamwriter 写入但给出网络异常
Posted
技术标签:
【中文标题】Streamwriter 写入但给出网络异常【英文标题】:Streamwriter writes but gives web exception 【发布时间】:2009-06-14 20:27:23 【问题描述】:我正在尝试通过 Web 服务插入数据。下面的代码写入数据库;但是,我有一个错误(见底部)。这里出了什么问题?以及如何解决?
//Create the web request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
//Set type to POST
request.Method = "POST";
request.ContentType = "text/XML";
// Write data
using (StreamWriter postStream = new StreamWriter(request.GetRequestStream()))
postStream.WriteLine("<biz_in><phone_no>+1604333333</phone_no></biz_in>");
postStream.Dispose();
错误:
System.Net.WebException 未处理 Message="请求被中止:请求被取消。" 来源="系统" 堆栈跟踪: 在 System.Net.ConnectStream.CloseInternal(布尔内部调用,布尔中止) 在 System.Net.ConnectStream.System.Net.ICloseEx.CloseEx(CloseExState closeState) 在 System.Net.ConnectStream.Dispose(布尔处理) 在 System.IO.Stream.Close() 在 System.IO.StreamWriter.Dispose(布尔处理) 在 System.IO.StreamWriter.Close() 在 C:/Program Files/Program.cs:line 62 中的 ConsoleApplication1.Program.Main(String[] args) 在 System.AppDomain.nExecuteAssembly(程序集程序集,字符串 [] 参数) 在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,证据 assemblySecurity,String [] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(对象状态) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) 在 System.Threading.ThreadHelper.ThreadStart()
【问题讨论】:
【参考方案1】:StreamWriter 在您释放时关闭底层流。
【讨论】:
Streamwriter 被证明比它应该的麻烦多了。我选择只使用“Stream”,因为 Stream postData = request.GetRequestStream(); postData.Write(byteData, 0, byteData.Length); postData.Close();然而,我发现了另一个问题。上面的代码在控制台应用程序中运行良好。由于这是一个移动 win 5 应用程序,因此在我的移动 ph 上执行会产生另一个错误。错误:由于可选资源无法显示错误消息 您推荐什么?找不到包含它的程序集 抱歉,错误消息应该是:无法显示错误消息,因为找不到包含它的可选资源程序集【参考方案2】:您可能希望增加请求的超时时间。
我在尝试分块上传 26Mb 文件时遇到了同样的问题,但由于同样的错误而失败。我增加了超时时间,它成功发布了它。 (我正在与亚马逊打交道)。
【讨论】:
【参考方案3】:包括这个:
request.KeepAlive = false;
这会起作用,但可能意味着性能损失,因为不会重复使用 TCP 连接(也称为 HTTP 流水线)。 TCP 连接现在立即关闭,并在每个 HTTP 请求时重新打开。
【讨论】:
【参考方案4】:如果您被指示将 MIME 类型设置为 text/XML;我假设您的服务器期望在消息正文中发送有效的 XML。
您在示例中的内容,即这一行:
postStream.WriteLine("+1604333333");
... 不能作为有效的 XML 数据。
尝试发送一个有效的 XML 文档,看看会发生什么。这是您可以发送的最小文档。发送此消息后,您应该会收到不同的错误。
postStream.WriteLine("<?xml version=\"1.0\"?><test />");
【讨论】:
以上是关于Streamwriter 写入但给出网络异常的主要内容,如果未能解决你的问题,请参考以下文章
StreamWriter 抛出 IOException 登录失败:未知用户名或密码错误