易趣批量商户服务 - C#端口到端的AddFixedPriceItem

时间:2013-11-26 15:17:45

标签: c# file-transfer ebay

我正在学习如何与eBay API集成,我正在努力让事情发挥作用。

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

目前我的工作流程如下:

  1. 找到出色的工作并将其中止
  2. 制作新的CreateUploadJobRequest
  3. 制作新的UploadFileRequest
  4. 制作新的StartUploadJobRequest
  5. 制作新的GetJobStatusRequest
  6. 制作新的DownloadFileRequest
  7. 一切顺利(我认为)直到第6步。请求以ProtocolException失败。

    直到那时我已经获得了fileReferenceIdjobId和成功的回复。我用来尝试这样做的代码(看起来很讨厌)是:

    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();
        }
    }
    

    我已经完成了调试模式,我收到了fileReferenceIDjobID

    我想到的一个想法是上传的xml存在问题,我唯一能想到的是我的一些标题存在问题,但我看不出问题是什么

    理想情况下,我可以帮助解决以下问题:

    1. 调试此方法并从服务中获取尽可能多的信息的最佳方式
    2. 对可能出现的问题的任何想法
    3. 提前致谢,如果需要其他信息,请告诉我。


      我现在已经设法确定问题所在,所以我会在这里发布解决方案给其他可能会遇到此问题的人。

      在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>
      

      由于

2 个答案:

答案 0 :(得分:1)

这是一个完整的工作计划

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

有很多代码可以理解电话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。

答案 1 :(得分: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