Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PostXML";缺少根元素";_C#_Xml - Fatal编程技术网

C# PostXML";缺少根元素";

C# PostXML";缺少根元素";,c#,xml,C#,Xml,在发布XML数据时,我一直遇到臭名昭著的“根元素丢失”错误。它有时有效,但大多数情况下会抛出错误 C#代码: public string postXMLData(string destinationUrl, string requestXml) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl); byte[] bytes;

在发布XML数据时,我一直遇到臭名昭著的“根元素丢失”错误。它有时有效,但大多数情况下会抛出错误

C#代码:

 public string postXMLData(string destinationUrl, string requestXml)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
            byte[] bytes;
            bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
            request.ContentType = "text/xml; encoding='utf-8'";
            request.ContentLength = bytes.Length;
            request.Method = "POST";
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(bytes, 0, bytes.Length);
            requestStream.Close();
            HttpWebResponse response;
            response = (HttpWebResponse)request.GetResponse();
            if (response.StatusCode == HttpStatusCode.OK)
            {
                Stream responseStream = response.GetResponseStream();
                string responseStr = new StreamReader(responseStream).ReadToEnd();
                return responseStr;
            }
            return "";
        }
<Person>
    <idPeople>0</idPeople>
    <AccountNumber>TEST02H</AccountNumber>
    <cFirstName>TEST 2</cFirstName>
    <cLastName>TEST 2</cLastName>
    <cTelWork/>
    <cTelMobile>0713473835</cTelMobile>
    <cEmail>myemail@mydomain.com</cEmail>
    <ubPPLIsActive>true</ubPPLIsActive>
    <ubPPLSMSOptIn>true</ubPPLSMSOptIn>
    <udPPLSMSOptInActivateDate>30/05/2017</udPPLSMSOptInActivateDate>
    <ulPPLAccessType>Administrator</ulPPLAccessType>
    <ubPPLNewsletterSignUp>true</ubPPLNewsletterSignUp>
    <ubPPLIncludeBuyerEmails>true</ubPPLIncludeBuyerEmails>
</Person>
XML数据:

 public string postXMLData(string destinationUrl, string requestXml)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
            byte[] bytes;
            bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
            request.ContentType = "text/xml; encoding='utf-8'";
            request.ContentLength = bytes.Length;
            request.Method = "POST";
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(bytes, 0, bytes.Length);
            requestStream.Close();
            HttpWebResponse response;
            response = (HttpWebResponse)request.GetResponse();
            if (response.StatusCode == HttpStatusCode.OK)
            {
                Stream responseStream = response.GetResponseStream();
                string responseStr = new StreamReader(responseStream).ReadToEnd();
                return responseStr;
            }
            return "";
        }
<Person>
    <idPeople>0</idPeople>
    <AccountNumber>TEST02H</AccountNumber>
    <cFirstName>TEST 2</cFirstName>
    <cLastName>TEST 2</cLastName>
    <cTelWork/>
    <cTelMobile>0713473835</cTelMobile>
    <cEmail>myemail@mydomain.com</cEmail>
    <ubPPLIsActive>true</ubPPLIsActive>
    <ubPPLSMSOptIn>true</ubPPLSMSOptIn>
    <udPPLSMSOptInActivateDate>30/05/2017</udPPLSMSOptInActivateDate>
    <ulPPLAccessType>Administrator</ulPPLAccessType>
    <ubPPLNewsletterSignUp>true</ubPPLNewsletterSignUp>
    <ubPPLIncludeBuyerEmails>true</ubPPLIncludeBuyerEmails>
</Person>

0
TEST02H
测试2
测试2
0713473835
myemail@mydomain.com
真的
真的
30/05/2017
管理员
真的
真的

我的问题有两个方面

  • 我发布的应用程序有一个错误,我解决了。我通过将目标URL粘贴到浏览器中查看发生了什么,发现了这个错误

  • 我需要对XML进行System.Web.HttpUtility.url编码

  • 我最后用这种方法发帖

    WebClient client = new WebClient();
    string xmlResult = client.DownloadString(_workContext.AccountingWebServiceLink + "?action=updatesecondary&xml=" + System.Web.HttpUtility.UrlEncode(strXML));
    

    那么错误在哪里呢?您是否使用WireShark或Fiddler查看过XML是否确实在发送?@JonSkeet由于XML在Post方法中的某个位置断裂,因此没有发送该XML。XML在第一个打开的尖括号之前不需要空格。你有一些错误。上周也看到了同样的错误。原来HttpResponse是gzip,必须解压。@jdweng:XML在文档开始之前通常可以使用空格。(看)也没有迹象表明我能看到在第一个开角支架前有一个空间-为什么你猜会有?猎户座:我会在尝试随机治疗之前进行诊断。你必须使用3G调制解调器吗?你能用Fiddler()代替Wireshark吗?