【问题标题】:How to view the request being sent in c#如何在c#中查看正在发送的请求
【发布时间】:2013-12-19 13:45:09
【问题描述】:

我正在编写以下代码。

            Int32 port = 7101;
            IPAddress localAddr1 = IPAddress.Parse("117.239.85.13");
            MemoryStream ms = new MemoryStream();
            XmlDocument doc = new XmlDocument();
            String message_text = "<estel><header><requesttype>CREDIT</requesttype></header><request><agentcode>910000006789</agentcode><vendorcode>HELLOTV</vendorcode><pin>***************</pin><destination>919555518484</destination><agenttransid>*****</agenttransid><amount>10</amount><productcode>SKUA</productcode><clienttype>portal</clienttype><comments>abcd</comments></request></estel>";
            doc.LoadXml(message_text);
            doc.Save(ms);

            ms.Seek(0, SeekOrigin.Begin);
            Byte[] data = ms.ToArray();

            TcpClient client = new TcpClient();
            client.Connect(localAddr1, port);
            MessageBox.Show(client.Connected.ToString()); // Connection was established here. Returns TRUE value

            NetworkStream stream = client.GetStream();
            StreamWriter writer = new StreamWriter(stream, Encoding.UTF8);
            writer.AutoFlush = false;
            writer.Write(Encoding.UTF8.GetBytes(message_text).Length);

            writer.Flush();
            stream.Write(data, 0, data.Length);
            MessageBox.Show(stream.DataAvailable.ToString()); // Returns TRUE value


            Byte[] bytes = new Byte[client.ReceiveBufferSize];
            string responseData;
            stream.Read(bytes, 0, Convert.ToInt32(client.ReceiveBufferSize));
            responseData = Encoding.UTF8.GetString(bytes);  // We are getting response here
            stream.Close();
            client.Close();
            textBox1.Text = responseData.ToString();

在这里,我使用 IP 和端口号向 Web 服务提供商发送 XML 数据。发送请求后,我收到以下响应 15 次

<estel><header><responsetype>INVALID REQUEST</responsetype></header></estel>

似乎正在附加一些额外的内容。如何查看正在发送的请求,以便更正它?

【问题讨论】:

    标签: c# xml tcp response


    【解决方案1】:

    您希望发送什么?

    NetworkStream stream = client.GetStream();
    StreamWriter writer = new StreamWriter(stream, Encoding.UTF8);
    writer.AutoFlush = false;
    writer.Write(Encoding.UTF8.GetBytes(message_text).Length);
    

    看起来您正在将 xml 文档的长度写入内容之前的流中。

    我希望您放入流中的输出是这样的: 357&lt;estel&gt;&lt;header&gt;&lt;requesttype&gt;CREDIT&lt;/requesttype&gt;&lt;/header&gt;&lt;request&gt;&lt;agentcode&gt;910000006789&lt;/agentcode&gt;&lt;vendorcode&gt;HELLOTV&lt;/vendorcode&gt;&lt;pin&gt;***************&lt;/pin&gt;&lt;destination&gt;919555518484&lt;/destination&gt;&lt;agenttransid&gt;*****&lt;/agenttransid&gt;&lt;amount&gt;10&lt;/amount&gt;&lt;productcode&gt;SKUA&lt;/productcode&gt;&lt;clienttype&gt;portal&lt;/clienttype&gt;&lt;comments&gt;abcd&lt;/comments&gt;&lt;/request&gt;&lt;/estel&gt;

    记下开头的数字。这是文档的长度。

    你在MemoryStream 上做了很多多余的事情。这不是必需的。对于一些更简洁的代码,请删除 msdata 并尝试以下操作:

    NetworkStream stream = client.GetStream();
    StreamWriter writer = new StreamWriter(stream, Encoding.UTF8);
    writer.AutoFlush = false;
    writer.Write(doc.Value.Length); //is this line intended? Take it out, see what happens!
    writer.Write(doc.Value);
    writer.Flush();
    

    为什么会这样? XmlNode.Value 为您提供节点的字符串内容。在您的情况下,这是整个文档内容。您的StreamWriter 已设置为您要使用的编码UTF-8。如果你向它传递一个字符串,它会为你调用Encoding.UTF8.GetBytes()

    【讨论】:

      【解决方案2】:

      我正在编写一个类似的程序来向 ncell 发送请求。我遇到了同样的问题,但我找到了解决方案。问题在于 xml 字符串格式。在 telnet 中测试的 xml 请求末尾需要一个新行。

          String message_text = "<estel><header><requesttype>CREDIT</requesttype></header><request><agentcode>910000006789</agentcode>    <vendorcode>HELLOTV</vendorcode><pin>***************</pin>    <destination>919555518484</destination><agenttransid>*****</agenttransid>    <amount>10</amount><productcode>SKUA</productcode>    <clienttype>portal</clienttype><comments>abcd</comments></request></estel>"
      + Environment.NewLine;
          Byte[] data = Encoding.UTF8.GetBytes(message_text);
          stream.Write(data, 0, data.Length);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-04
        • 1970-01-01
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-30
        相关资源
        最近更新 更多