【问题标题】:HTTP Post XML document - server receives only first lineHTTP Post XML 文档 - 服务器只接收第一行
【发布时间】:2010-10-21 21:28:28
【问题描述】:

我有一个通过 HTTPS Post 将 XML 文档发送到服务器的 C# 应用程序。问题是服务器只接收第一行<?xml version="1.0" encoding="UTF-8"?>。这是我的代码的截断版本(仅重要部分)。什么可能导致这个问题?我的代码有修改吗?

与服务器的 SSL 连接已得到保证,我收到的返回消息是“不接受文档类型”。

谢谢!

 StreamWriter loPostData = null;
 HttpWebRequest loHttp = null;
 HttpWebResponse loWebResponse = null;
 byte[] buffer;

 String uri = ConfigurationSettings.AppSettings["URL"];

 loHttp = (HttpWebRequest)WebRequest.Create(uri);
 buffer = Encoding.ASCII.GetBytes(payload);

 //Request Header
 loHttp.ProtocolVersion = HttpVersion.Version11;
 loHttp.KeepAlive = true;
 loHttp.Accept = "text/xml;charset=\"utf-8\"";
 loHttp.Method = WebRequestMethods.Http.Post;
 loHttp.ContentType = "text/xml;charset=\"utf-8\"";
 loHttp.ContentLength = buffer.Length;
 loHttp.SendChunked = true;
 loHttp.TransferEncoding = "7bit";
 loHttp.AllowWriteStreamBuffering = true;

 ServicePointManager.ServerCertificateValidationCallback += delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
   {
       return true; // **** Always accept return
   };

   X509Certificate x509_1 = new X509Certificate(ConfigurationSettings.AppSettings["OPEN_INVOICE_CERTIFICATE"]);
   loHttp.ClientCertificates.Add(x509_1);

    //Send data
   loPostData = loHttp.GetRequestStream();
   loPostData.Write(buffer, 0, buffer.Length);
   loPostData.Close();

    //Get a response
    loWebResponse = (HttpWebResponse)loHttp.GetResponse();
    StreamReader responsestream = new StreamReader(loWebResponse.GetResponseStream());
    String rsp = responsestream.ReadToEnd();

    responsestream.Close();

【问题讨论】:

    标签: c# xml http-post


    【解决方案1】:

    根据您收到的错误消息,您确定您调用的页面真的希望内容类型为 text/xml?可能您需要像标准的 webrequest 一样发布它,而不是直接按内容类型发布 HTML 文件。

    【讨论】:

    • 是的,这实际上是提供商所说的。我可以省略它来测试它。
    • 我确认服务器需要“text/xml;charset=utf-8”,否则它会完全拒绝payload。包含上述字符串后,它接受消息,但只接受第一行。
    • 文档以string 的形式传入此方法。它类似于此示例的内容:forums.techarena.in/software-development/1195703.htm。将字符串加载到 byte[] 对象之后。
    • 这里还有更多:我向服务器(第三方服务器)发送了一个非 xml 字符串。我只是编码了几个字符,我得到了相同的响应。它可能会告诉我我没有正确发送文档。在进行了更多测试后,我发现流对象中的 Length 和 Position 属性不受支持。这会导致接收方出现错误或冲突吗?
    【解决方案2】:

    原来是线条
    loHttp.SendChunked = true;
    loHttp.TransferEncoding = "7bit";

    不需要。

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      相关资源
      最近更新 更多