簡體   English   中英

eBay FileTransferService-請指定有效格式的文件

[英]eBay FileTransferService - Please specify a file with a valid format

我正在使用eBay大型商家服務。 我已經成功地獲得了基本的AddFixedPriceItem作業,以使用.NET HttpClient進行工作(最終)。 但是,根據我的AddFixedPriceItem XML文件的內容,對uploadFile作業的響應將返回:

請指定有效格式的文件

我無法查明是什么原因導致此錯誤。

范例1:

我有一個帶有2個AddFixedPriceItemRequest請求的文件,該請求將成功啟動,而一個帶有3個AddFixedPriceItemRequest請求的文件,該文件將不會成功。 當我從第3個請求中刪除一些NameValueList標記時,它將起作用。 我沒有看到與我刪除的那些NameValueList標記有任何錯誤或不同的地方。 如果我自己發出第三個請求,而沒有刪除任何標簽,則它可以很好地工作。

范例2:

我在包含Description標簽(用於HTML值)的CDATA信息的文件中有1個AddFixedPriceItemRequest請求,該請求將成功啟動,而具有2個AddFixedPriceItemRequest請求的另一個文件也包含幾乎相同的CDATA值,但將不起作用。 如果我從添加的第二個請求中刪除了CDATA,它仍然不起作用。 如果我也從第一個請求中刪除了CDATA(它本身第一次就成功啟動了),那么它確實可以工作。

我對此很困惑。 對於哪個文件被視為“有效”,似乎沒有任何押韻和理由。

下面是一個失敗的請求示例:(堆棧溢出似乎並沒有使用Content-ID,但是它們在那里。)

POST http://storage.sandbox.ebay.com/FileTransferService HTTP/1.1
X-EBAY-SOA-SECURITY-TOKEN: xxx
X-EBAY-SOA-SERVICE-NAME: FileTransferService
X-EBAY-SOA-SERVICE-VERSION: 1.0.0
X-EBAY-SOA-OPERATION-NAME: uploadFile
X-EBAY-SOA-OPERATION-FORMAT: XML
Content-Type: multipart/related; boundary="MIME_boundary"; type="application/xop+xml"; start="<0.urn:uuid:9ce221c2-659d-4852-a166-51dcbccf68d9>"; start-info="text/xml"
Host: storage.sandbox.ebay.com
Content-Length: 3041
Expect: 100-continue

--MIME_boundary
Content-Type: application/xop+xml
Content-ID: <0.urn:uuid:9ce221c2-659d-4852-a166-51dcbccf68d9>
Content-Transfer-Encoding: binary

<?xml version="1.0" encoding="utf-8"?><uploadFileRequest xmlns="http://www.ebay.com/marketplace/services"><fileAttachment><Data><xop:Include href="cid:urn:uuid:c6f7fc4d-352b-414f-8638-6c9bdf40519e"  xmlns:xop="http://www.w3.org/2004/08/xop/include"/></Data><Size>1710</Size></fileAttachment><fileFormat>zip</fileFormat><fileReferenceId>50008675134</fileReferenceId><taskReferenceId>50008489744</taskReferenceId></uploadFileRequest>
--MIME_boundary
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-ID: <urn:uuid:c6f7fc4d-352b-414f-8638-6c9bdf40519e>

UEsDBBQAAAAIAMZZ9UhnranV5gUAADYmAAAPACQAYWRkbGlzdGluZ3MueG1sCgAgAAAAAAABABgA4roeimLj0QE1N5fd4t3RAex2PDlG3dEB7Vptc9o4EP4rmny59kOxDZiXjOoZXppL5kjDxaG5+9QR9gJqbcsny2m4X38rgwEbmJ57zDWd8inSrvaRdq1dPRKh/TT4PGSKvXv2Fiyawz38lUKiEvIcBlHy9iKV0SVM2fKSxTy5hP6ozxIYiDAWEUQquXDoNTAfpEM/gEy4iJxuy6ZG3qEuV3AzdExqrFvUyA16vn/Fn8EfS+7BjYJwPfe/n/qdlEKOcNkpm4MD0ceJS42ikD4yGfFoPoInCJxrPl9QoyA6sm69HocOmIK5kMtbFsdo0QsC8QV8R8kUqHFESQci8rlCFPTWMk10fVeC6jRScunoteZtOkilhMjT0iGK8x4dQuJJHmtbZ8h4JAKMIhmhGwqnJMPRda9lN6/e3PX7xP2Cojc9GRJrNYJcBUJIMmJhTHhE7nhA+jJNFuDjXxH9jT7s4tMhT2KmvMUDD+GWPTsYj7KI3kRPGHz0+kEy7zNOeAtqIXzH/W1CjWNKOhIey+YwO23Tosamn8XZjcHjM+4lDn3PQvjAghRGPFGrrtOXLPKpkbVpptyGAr9YJlipS5ZloNvx+xLMTviqIQkfghNhYQZOycMyhiLeNQvEHKLKUP8dZQBS6c+RfaEi3MDtEYNMRpXwrnjEk0UR6NBerBJ/9kwemVKY4UVczLcvlZDep+EUJBEzooOXlNAqQd09gWRBQIaYK5GuIiU0u0luohq5Jn8Qq5M1H3XTzJrHQ2qUUkRLMbX0jnGK9RPzakdHx9xTqYQhKMaDZNOf3I+chVLxpWHwcF6bCzQIa54IjZsQ45kYm+Qydvd07VM8p8YOxqaznUDykMllXhe35VMXQqtud6xt0cxOgj2DsRR+6qm1GxvgrAJg9q5bu+m/ElCtLGZgNtzYWt5EXpD6AH22XM+Sw89YkIAuXscG5LauEt7n8UIoof0vmhV1dDIeOGbLrltNXFGnjo5rifb4oIO/pyxSXC2dFjU2bXoPGN5ojJ56m17S8zyIFfh3q6JdklLj8DC0nqVR3rvFE3TZxxKth+/I8zkeuVrw6C4/dpbJx4a5QS4oCwfUAzwr4m8FOqtkZkTizAlUZg6TBUiolU4fd8Gzc3QgEjVm3O8v13P00yVI5A/H9PnK8kDlAzfRzQWrlAmY2oKtMiXvuSCfMJdWuMmeHLerkPrLWFuAsqpsgwf62M21e2Z7w7VzxFsf/zfDtxfIBy4cs2bumeqRe+ZIqTKewYJMjXb7hqUx9EoC5EPWzKYg2gPYhMfYjzTmZEZssgZFUuA0Oo1Wo40SbFNXMamyeuVY7Q4Kt336wFUApyQ5tRpusRUqnUyw4DTqdpt5zGyD7zeb9S7zwJ/aDctn7VbLtGeYpJOsLq3In3GMoJ6p6ympqzv46kd1kYpEZLCQIjxz1m3cTkZZK0L9lIy1uAfPXPXFclV38ANRVZ15L4mpWs0zUz0z1Z+YqXZOwlQrc5pdmtpldrfV9L0mq0MTZmxarzPPt6yuz5jFWPdMU/9nmtpumKvLR8//lCaKTQM4P7FWoKt5/E7BV78JqxfHwZodkleTEdEq8F+X0OWS5EGrhp4kEE6DJdHZxSWUAvknJNXZtU7EIkyfkzHusFe/Nl+fyXoBT0ifHGLs/SDjDVWhRhDNVQnK/qUiTlZ0NKu4k3zOy24iK2GVAIfIkEpLsloX3/sV/hp0CSxFyqq2rFss8ZIjQS3dthTo7D/FNct+wbcsa3vLam1uWZ2vXLIOzZTVdxaQK2D6nlOaB8+KKJkJGaJf61uAXw1eLYNSWPHExXMlFhJvRZi0ulzLaoXATed4hcNCTO6FCA/UqLsZlolqWxJZFx6lB7BWikpYu1E7yc7Sq9L7age4CHjL5hEo7lVC/SCCA28LdfOpEsoRBx+rgXBfLXAzDDn2VNm7zvHK8J3fDXJS8WM8HGwp0Et5OcAV1a3zb1znl4Of+OWg2dh/Oai36xVeDr7pmrn3I5fZsVseXortrj1tWp1Wt9Xw/DbzZzbmadOr8COXcex/w5x/AFBLAQItABQAAAAIAMZZ9UhnranV5gUAADYmAAAPACQAAAAAAAAAIAAAAAAAAABhZGRsaXN0aW5ncy54bWwKACAAAAAAAAEAGADiuh6KYuPRATU3l93i3dEB7HY8OUbd0QFQSwUGAAAAAAEAAQBhAAAANwYAAAAA
--MIME_boundary--

這是我使用HttpClient發送請求的方式:

    byte[] data;
long fileLength;
var uuidRequest = Guid.NewGuid().ToString();
var uuidAttachment = Guid.NewGuid().ToString();

using (FileStream fs = File.OpenRead(filePath))
{
    data = new byte[fs.Length];
    fs.Read(data, 0, data.Length);
    fileLength = fs.Length;
}

var xml =
    "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
    "<uploadFileRequest xmlns=\"http://www.ebay.com/marketplace/services\">" +
        "<fileAttachment>" +
            "<Data><xop:Include href=\"cid:urn:uuid:" + uuidAttachment + "\"  xmlns:xop=\"http://www.w3.org/2004/08/xop/include\"/></Data>" +
            "<Size>" + fileLength + "</Size>" +
        "</fileAttachment>" +
        "<fileFormat>zip</fileFormat>" +
        "<fileReferenceId>" + fileReferenceID + "</fileReferenceId>" +
        "<taskReferenceId>" + jobID + "</taskReferenceId>" +
    "</uploadFileRequest>";

var multippartcontent = new MultipartContent("related", "MIME_boundary");
multippartcontent.Headers.Remove("Content-Type");
multippartcontent.Headers.TryAddWithoutValidation("Content-Type", string.Format("multipart/related; boundary=\"MIME_boundary\"; type=\"application/xop+xml\";start=\"<0.urn:uuid:{0}>\";start-info=\"text/xml\"", uuidRequest));

var content = new StringContent(xml);
content.Headers.ContentType = new MediaTypeHeaderValue("application/xop+xml");
content.Headers.Add("Content-ID", string.Format("<0.urn:uuid:{0}>", uuidRequest));
content.Headers.TryAddWithoutValidation("Content-Transfer-Encoding", "binary");
multippartcontent.Add(content);

var attachmentContent = new StringContent(Convert.ToBase64String(data));
attachmentContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
attachmentContent.Headers.TryAddWithoutValidation("Content-Transfer-Encoding", "base64");
attachmentContent.Headers.Add("Content-ID", string.Format("<urn:uuid:{0}>", uuidAttachment));
multippartcontent.Add(attachmentContent);


var uploadFileResp = httpclient.PostAsync(ftServiceUrl, multippartcontent).Result.Content.ReadAsStringAsync().Result;

我會注意到,當我從eBay( https://ebaydts.com/eBayKBDetails?KBid=1338 )上載對LMS項目不適合我的同一文件時。 這使我覺得我在代碼中做錯了什么-也許與我的編碼方式有關?

HTTP響應

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-EBAY-SOA-SERVICE-METRICS: 455075973
X-EBAY-SOA-REQUEST-ID: 15613449-f630-a471-d2d4-ec64ffff71c7!FileTransferService!10.71.29.45!v3apibulksandboxcore[]
X-EBAY-SOA-SERVICE-VERSION: 1.1.0
X-EBAY-SOA-MESSAGE-PROTOCOL: NONE
X-EBAY-SOA-RESPONSE-DATA-FORMAT: XML
X-EBAY-SOA-OPERATION-NAME: uploadFile
X-EBAY-SOA-SERVICE-NAME: {http://www.ebay.com/marketplace/services}FileTransferService
Content-Type: text/xml;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 22 Jul 2016 15:41:19 GMT

1cd
<?xml version='1.0' encoding='UTF-8'?><uploadFileResponse xmlns="http://www.ebay.com/marketplace/services"><ack>Failure</ack><errorMessage><error><errorId>11</errorId><domain>Marketplace</domain><severity>Error</severity><category>Application</category><message>Please specify a File with Valid Format</message><subdomain>FileTransfer</subdomain></error></errorMessage><version>1.1.0</version><timestamp>2016-07-22T15:41:20.118Z</timestamp></uploadFileResponse>
0

我終於得到了答案。 “ 100繼續”消息給了我所需的線索。 我花太多時間試圖了解間歇性操作。

1)您的代碼永遠不會真正起作用。 當您運行LMS項目時,將建立一個cookie,該cookie正在為您的請求設置默認設置。 因此,您的代碼在運行LMS之后將始終有效。 如果您從IE歷史記錄中刪除Cookie,則您的代碼將永遠無法使用。

2)“ 100繼續消息”用於“塊模式”(不是流)。 Net庫默認為HTTP 1.1,而如今大多數服務器在see 1.1將默認為塊模式時使用。 服務器發送一個塊,但是Net庫中沒有辦法向服務器請求第二個塊。 因此,連接超時並失敗。 解決此問題的唯一方法是將HTTP請求設置為不支持塊模式的HTTP 1.0,服務器會將響應作為流發送回。

嘗試這個

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("URL");
            request.ProtocolVersion = HttpVersion.Version10;

另請參閱: 在HttpClient中設置HTTP協議版本

看失敗的請求的第一行有1.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM