0

I'm trying to send an XML snippet to my localhost server. I've been able to successfully connect and (I think) successfully send the snippet. However, when I run my program, I get an unhandled WebException. The full text of the exception detail is as follows:

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

My code (starts at line 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

Can someone shed some light on this for me?

Matt
  • 2,576
  • 6
  • 34
  • 52

1 Answers1

1

While I still haven't achieved my intended goal of communicating with the application, I did discover that the issue was that the communication was via raw TCP/IP messages, NOT XML or HTTP requests like I had assumed. So, I've come up with a troubleshooting checklist to run when you get the "Server Protocol Violation: Section: ResponseStatusLine" error:

  1. Add the following code to your app.config file: (it allows incorrect headers to be passed)

    <system.net>
        <settings>
            <httpWebRequest useUnsafeHeaderParsing = "true"/>
        </settings>
    </system.net>
    
  2. If that doesn't work after cleaning and rebuilding, then the server you are connecting to may not be sending WebRequest data. To test this, I used a Telnet client.
  3. To test the data using Telnet, either download and open a Telnet client (Windows, I suggest PuTTYtel, Unix and others can usually just launch their terminal/command prompt and type telnet to activate).

    a) Enter the server you are trying to connect to and the port number in the appropriate fields (Windows) OR type telnet -o servername:portnumber in Terminal and press enter. (Unix/Linux flavors)

    b) When the window comes up, try typing your raw query, taking careful note of any whitespace or line feed specifications. In my case I typed:

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

    and pressed the enter key. When I did, I immediately saw the output from the application I was looking for. :D
    However, if this does not work, look elsewhere for the solution, because I can help you no further.

Hope this helps!

Matt
  • 2,576
  • 6
  • 34
  • 52