我正在学习如何与eBay API集成,我正在努力让事情发挥作用。
到目前为止,我可以使用标准交易API列出单个固定价格项目,但我需要能够批量上传项目,因此我正在调查批量商户服务API。
目前我的工作流程如下:
CreateUploadJobRequest
UploadFileRequest
StartUploadJobRequest
GetJobStatusRequest
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();
}
}
我已经完成了调试模式,我收到了fileReferenceID
和jobID
。
我想到的一个想法是上传的xml存在问题,我唯一能想到的是我的一些标题存在问题,但我看不出问题是什么
理想情况下,我可以帮助解决以下问题:
提前致谢,如果需要其他信息,请告诉我。
我现在已经设法确定问题所在,所以我会在这里发布解决方案给其他可能会遇到此问题的人。
在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>
由于
答案 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