【问题标题】:VB.NET server Protocol Violation "Section=ResponseStatusLine" using XMLVB.NET 服务器协议冲突“Section=ResponseStatusLine”使用 XML
【发布时间】:2012-06-27 19:28:45
【问题描述】:

我正在尝试将 XML sn-p 发送到我的本地主机服务器。我已经能够成功连接并且(我认为)成功发送了 sn-p。但是,当我运行我的程序时,我得到一个未处理的 WebException。异常详情全文如下:

System.Net.WebException was unhandled
Message=The server committed a protocol violation. Section=ResponseStatusLine
Source=System
StackTrace:
   at System.Net.HttpWebRequest.GetResponse()
   at Automation_Algorithm.AutomationForm.cmdStart_Click(Object sender, EventArgs e) in C:\Users\ConzM\documents\visual studio 2010\Projects\Automation Algorithm\Automation Algorithm\AutomationForm.vb:line 29
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
   at Automation_Algorithm.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81

我的代码(从第 11 行开始):

Private Sub cmdStart_Click(sender As System.Object, e As System.EventArgs) Handles cmdStart.Click
    Dim requestNF As WebRequest = WebRequest.Create("http://127.0.0.1:4096")
    requestNF.Method = "POST"
    Dim datastring As String
    Dim getdata =
        <?xml version='1.0' encoding='ISO-8859-1'?>
        <MLCommandSet>
            <info/>
        </MLCommandSet>                                                                     '/
    datastring = "<?xml version='1.0' encoding='ISO-8859-1'?>" & vbNewLine & getdata.ToString()
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(datastring)
    requestNF.ContentLength = byteArray.Length
    requestNF.ContentType = "text/xml"
    Dim dataStream As Stream = requestNF.GetRequestStream()
    dataStream.Write(byteArray, 0, byteArray.Length)
    txtXMLOutFF.AppendText(getdata.ToString & vbNewLine)
    dataStream.Close()

    Dim responseNF As Object = requestNF.GetResponse.GetResponseStream  '<---breaks here'
    Console.WriteLine(CType(responseNF, HttpWebResponse).StatusDescription.ToString)
    txtXMLInFF.Text = CType(responseNF, HttpWebResponse).StatusDescription.ToString
    dataStream = responseNF.GetResponseStream
    Dim readerNF As New StreamReader(dataStream)
    Dim responseFromServerNF As String = readerNF.ReadToEnd
    Console.WriteLine(responseFromServerNF)
    txtXMLInFF.AppendText(responseFromServerNF.ToString & vbNewLine)
    readerNF.Close()
    dataStream.Close()
    responseNF.Close()
End Sub

有人可以帮我解释一下吗?

【问题讨论】:

    标签: xml vb.net stream xmlhttprequest system.net.webexception


    【解决方案1】:

    虽然我还没有实现与应用程序通信的预期目标,但我确实发现问题在于通信是通过原始 TCP/IP 消息进行的,而不是我假设的 XML 或 HTTP 请求。因此,当您收到“服务器协议违规:部分:ResponseStatusLine”错误时,我想出了一个故障排除清单:

    1. 将以下代码添加到您的 app.config 文件中:(它允许传递不正确的标头)

      <system.net>
          <settings>
              <httpWebRequest useUnsafeHeaderParsing = "true"/>
          </settings>
      </system.net>
      
    2. 如果清理和重建后仍无法正常工作,则您连接的服务器可能未发送 WebRequest 数据。为了对此进行测试,我使用了 Telnet 客户端。
    3. 要使用 Telnet 测试数据,请下载并打开 Telnet 客户端(Windows,我建议 PuTTYtel,Unix 和其他通常只需启动他们的终端/命令提示符并键入 telnet 即可激活)。

      a) 在相应字段 (Windows) 中输入您尝试连接的服务器和端口号,或者在终端中输入 telnet -o servername:portnumber 并按 Enter。 (Unix/Linux 风格)

      b) 当窗口出现时,尝试输入您的原始查询,仔细记下任何空格或换行规范。就我而言,我输入了:

      <?xml version='1.0' encoding='ISO-8859-1'?>
      <MLCommandSet>
          <info/>
      </MLCommandSet>
      

      然后按下回车键。当我这样做时,我立即看到了我正在寻找的应用程序的输出。 :D
      但是,如果这不起作用,请在其他地方寻找解决方案,因为我无能为力。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-29
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2011-04-19
      相关资源
      最近更新 更多