2

我只是在学习如何与 eBay API 集成,我正在努力让事情正常进行。

到目前为止,我可以使用标准交易 API 列出单个固定价格商品,但我需要能够批量上传商品,因此我正在研究大型商家服务 API。

目前我的工作流程如下:

  1. 找到出色的工作并放弃它们
  2. 创建一个新的CreateUploadJobRequest
  3. 创建一个新的UploadFileRequest
  4. 创建一个新的StartUploadJobRequest
  5. 创建一个新的GetJobStatusRequest
  6. 创建一个新的DownloadFileRequest

在第 6 步之前,一切都很好(我认为)。请求失败并显示ProtocolException.

直到那时,我一直得到fileReferenceId',jobId'和成功的回应。我用来尝试执行此操作的代码(看起来很讨厌)是:

httpRequest.Headers.Remove("X-EBAY-SOA-SERVICE-NAME");
httpRequest.Headers.Remove("X-EBAY-SOA-OPERATION-NAME");
httpRequest.Headers.Add("X-EBAY-SOA-SERVICE-NAME", "FileTransferService");
httpRequest.Headers.Add("X-EBAY-SOA-OPERATION-NAME", "downloadFile");
if (jobStatResp != null)
{
    var ftclient2 = new FileTransferServicePortClient("FileTransferServiceSOAP");
    using (OperationContextScope scope2 = new OperationContextScope(ftclient2.InnerChannel))
    {
        OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, httpRequest);

        DownloadFileRequest downloadReq = new DownloadFileRequest();
        downloadReq.fileReferenceId = jobStatResp.jobProfile[0].fileReferenceId;
        downloadReq.taskReferenceId = jobStatResp.jobProfile[0].jobId;

        DownloadFileResponse downloadResponse = ftclient2.downloadFile(downloadReq);
        FileAttachment attachment = downloadResponse.fileAttachment;
        FileStream fs = File.Create("response"+Guid.NewGuid());
        BinaryWriter writer = new BinaryWriter(fs);

        writer.Write(attachment.Data);
        writer.Close();
        fs.Close();
    }
}

我已经在调试模式下完成了,我得到了一个fileReferenceIDand jobID

想到的一个想法是上传的xml有问题,我唯一能想到的另一件事是我的一些标题有问题,但我看不出问题是什么。

理想情况下,我可以在以下方面提供帮助:

  1. 调试此问题并从服务中获取尽可能多信息的最佳方法
  2. 关于可能出错的任何想法

提前致谢,如果需要其他信息,请告诉我。


我现在已经设法确定了问题所在,因此我将在此处为可能遇到此问题的其他人发布解决方案。

在 app.config 中,需要将以下内容附加到FileTransferService您配置的端点

<mtomMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" messageVersion="Soap12" writeEncoding="utf-8">
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</mtomMessageEncoding>

谢谢

4

2 回答 2

1

这是一个完整的工作程序

https://ebaydts.com/eBayKBDetails?KBid=1338

有很多代码可以理解 e call LMS 服务。

要通过 LMS 执行诸如 Revise-Add-Relist-End FixedPriceItem 之类的请求,您必须像这样创建一个 xml

<?xml version="1.0" encoding="utf-8"?>
<BulkDataExchangeRequests>
  <Header>
    <SiteID>101</SiteID>
    <Version>835</Version>
  </Header>
  <AddFixedPriceItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
    <ErrorLanguage>en_US</ErrorLanguage>
    <MessageID>0G86041299</MessageID>
    <Version>835</Version>
    <WarningLevel>High</WarningLevel>
    <Item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:ebay:apis:eBLBaseComponents">

</Item>
</AddFixedPriceItemRequest>
<AddFixedPriceItemRequest>
[.. other requests ]
</AddFixedPriceItemRequest>
<BulkDataExchangeRequests>

您可以使用 eBay SDK .NET 创建 ItemType XML 并序列化 ItemType 类。确保在需要的地方添加 xmlns="urn:ebay:apis:eBLBaseComponents" 否则 eBay 的解析器将无法工作。

使用 CSharpZipLib 对其进行压缩并通过 uploadEndToEnd 方法发送,获取响应解压缩响应文件并解析响应 xml。

于 2013-11-27T15:11:42.130 回答
0

在第 6 步请求中出现 ProtocolException 失败时,我遇到了同样的问题。我尝试了 kipper_t 在 app.config 中添加 mtomMessageEncoding 的解决方案,但仍然收到相同的失败消息。

最后只有下面的解决方案有效。使用该函数替换第6步,文件下载成功:

https://ebay.custhelp.com/app/answers/detail/a_id/1567/~/downloadfile-sample-(xml)-in-c%23

于 2014-07-02T08:29:32.963 回答