2015-04-20 2 views
1

Я разрабатываю приложение C#, которое должно возвращать все доступные категории eBay. К сожалению, я не могу решить проблему с DetailLevel.C# eBay API DetailLevel

DetailLevel является частью запроса и сообщает серверам eBay, как должен выглядеть ответ.

Мне нужно установить DetailLevel на "ReturnAll". Следуя образцам кода, которые доступны в Интернете, я еще не успел.

Вот код, я использую до сих пор:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using EbayGetCategories.ebayAPI; 
using System.IO; 
using System.ServiceModel; 
using System.Xml; 
using System.Data.OleDb; 

namespace EbayGetCategories 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int anzahl; 
      string endpoint = "https://api.ebay.com/wsapi"; 
      string callName = "GetCategories"; 
      string siteId = "0"; 
      string appId = "YOUR_APPID";  // use your app ID 
      string eBayToken = "YOUR_TOKEN"; 
      string version = "793"; 
      // Build the request URL 
      string requestURL = endpoint 
      + "?callname=" + callName 
      + "&siteid=" + siteId 
      + "&appid=" + appId 
      + "&version=" + version 
      + "&routing=default"; 
      // Create the service 
      eBayAPIInterfaceClient service = new eBayAPIInterfaceClient("eBayAPI", requestURL); 
      // Assign the request URL to the service locator. 
      EndpointAddress address = new EndpointAddress(requestURL); 
      service.Endpoint.Address = address; 
      // Set credentials 
      // Make the call to GeteBayOfficialTime 
      var detailLevel = new DetailLevelCodeType[1]; 
      detailLevel[0] = DetailLevelCodeType.ReturnAll; 
      GetCategoriesRequestType request = new GetCategoriesRequestType(); 
      request.WarningLevelSpecified = true; 
      request.WarningLevel = WarningLevelCodeType.High; 
      request.Version = version; 
      request.DetailLevel = detailLevel; 
      CustomSecurityHeaderType cred = new CustomSecurityHeaderType(); 
      cred.eBayAuthToken = eBayToken; 
      GetCategoriesResponseType response = service.GetCategories(ref cred, request); 
      Console.WriteLine(response.Ack); 
      Console.WriteLine(response.CategoryCount); 
      Console.ReadKey(); 
      OleDbConnection con = new OleDbConnection(); 
      OleDbCommand cmd = new OleDbCommand(); 
      con.ConnectionString = @"Provider=PervasiveOLEDB;" + @"Data Source=EBAYAPIWARNER;" + @"Location=192.168.0.11;"; 
      cmd.Connection = con; 
      cmd.CommandText = "INSERT INTO 'ebay_categories' VALUES (2,2,'cat',2,'test')"; 
      try 
      { 
       con.Open(); 
       anzahl = cmd.ExecuteNonQuery(); 
       Console.WriteLine(anzahl); 
       con.Close(); 
      } 
      catch(Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
     } 
    } 
} 

Консоль показывает мне значения «Подтверждено» и «CategoryCount», который является количество категорий, возвращенных eBay.

Для «Ack» я получаю значение «Успех», которое хорошо до сих пор, но CategoryCount всегда показывает мне «0». У меня есть тестовый инструмент SOAP, который дает мне тот же результат, если «DetailLevel» установлен неправильно. Не могли бы вы помочь мне решить эту проблему?

ответ

1

DetailLevel фактически Array_Of_DetailLevelCodeType (C++), (Или coresponding с # DetailLevelCodeTypeCollection()) Так изменяя Ваш код:

 var detailLevel = new DetailLevelCodeTypeCollection(); 
     detailLevel.Add(DetailLevelCodeType.ReturnAll); 

Должно работать. Также полезно сохранять запрос/ответ Перед отправкой запроса/после получения ответа на файл xml, чтобы проверить его синтаксис. С уважением.

0

Вы можете использовать eBayAPIInterfaceService (добавить веб-ссылку) вместо eBayAPIInterfaceClient.

ebay web ref: http://developer.ebay.com/webservices/latest/ebaySvc.wsdl, но вы должны проверить версию. Иногда у последней версии есть проблема. Поэтому попробуйте другие версии. ехр: http://developer.ebay.com/webservices/1025/ebaySvc.wsdl

Набор detaillevel:

request.DetailLevel = new DetailLevelCodeType[] { DetailLevelCodeType.ReturnAll };