1.請求流程介紹
提供SOA地址:https://api.ebay.com/wsapi api
WSDL生成的代碼在WebService.cs文件當中。 spa
ApiCall封裝了全部的RPC,其核心實如今SendRequest裏面,其中有兩個事件,請求以前,與請求以後 3d
CustomSecurityHeaderType封裝了用戶認證信息 日誌
SoapHttpClientProtocolEx繼承SoapHttpClientProtocol,加上了SoapRequest,SoapResponse屬性。用來生成請求和響應的XML報文。 orm
使用ApiLogManager進行日誌記錄 blog
2.實踐
- 非string字段,使用 "屬性Specified" = true
如: 繼承
pagination.PageNumberSpecified = true; 事件
- 捕獲ApiException,遍歷Errors來細化錯誤
如:在ReviseInventoryStatus時,一次調整四個SKU就須要遍歷錯誤結果 ci
-
catch (ApiException apiEx)
-
{
-
var str = string.Empty;
-
foreach (ErrorType error in apiEx.Errors)
-
{
-
if (error.SeverityCode == SeverityCodeType.Error)
-
{
-
foreach (ErrorParameterType ePara in error.ErrorParameters)
-
{
-
str += ePara.ParamID + ":" + ePara.Value + " ";
-
if (ePara.ParamID == "SKU")
-
{
-
returns.Remove(returns.First(zw => zw.SKU == ePara.Value));
-
}
-
}
-
str += error.LongMessage + Environment.NewLine;
-
}
-
}
-
-
//有錯誤的
-
NotifyAndLog(string.Format(ResPriceCaptureAndRevise.Wrong_PriceRevised, "", str),
-
LogLevel.Error, accPriceInfo.SellerAccount);
-
}
若是使用Ack來判斷,可能某些有數據返回的時候,狀態不是Success,而是Warning get
-
if (apicall.ApiResponse.Ack == AckCodeType.Success || apicall.ApiResponse.Ack == AckCodeType.Warning)
-
{
-
//
-
}
Pagination
-
PaginationType pager = new PaginationType();
-
pager.EntriesPerPage = 100;
-
pager.EntriesPerPageSpecified = true;
-
-
for (int page = 1; page <= totalPage; page++)
-
{
-
pager.PageNumber = page;
-
pager.PageNumberSpecified = true;
-
-
if (apicall.ApiResponse.Ack == AckCodeType.Success || apicall.ApiResponse.Ack == AckCodeType.Warning)
-
{
-
// 保存數據
-
totalNum = (apicall.ApiResponse.PaginationResult == null ? 0 : apicall.ApiResponse.PaginationResult.TotalNumberOfEntries);
-
totalPage = (apicall.ApiResponse.PaginationResult == null ? 0 : apicall.ApiResponse.PaginationResult.TotalNumberOfPages);
-
}
-
}
在ApiResponse. PaginationResult的TotalNumberOfEntries和TotalNumberOfPages獲取總數和分頁數。