2010-09-01 64 views
3

我正尝试使用eBay Finding API发送高级搜索请求并返回结果。我在下面列出了我的代码。使用.NET Ebay Finding API/SDK如何成功搜索?

出于某种原因,当我到下面一行:

FindItemsAdvancedResponse response = service.findItemsAdvanced(request); 

称为“响应”的对象是回来为空。

我不知道我要去哪里错了,没有异常被从呼叫抛向service.findItemsAdvanced()

如果你可以看看,并提供任何意见,在所有我将是最感激。

这里是我的Program.cs,直到问题

Progam.cs

using System; 
using System.ServiceModel; 
using System.ServiceModel.Channels; 
using EbayParser.com.ebay.developer; 
using System.Net; 
namespace EbayParser 
{ 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 

       // Creating an object to the BestMatchService class 

       CustomFindingService service = new CustomFindingService(); 
       service.Url = "http://svcs.sandbox.ebay.com/services/search/FindingService/v1"; 

       com.ebay.developer.FindItemsAdvancedRequest request = new EbayParser.com.ebay.developer.FindItemsAdvancedRequest(); 

       //Create Filter Objects 
       com.ebay.developer.ItemFilter filterEndTimeFrom = new EbayParser.com.ebay.developer.ItemFilter(); 
       com.ebay.developer.ItemFilter filterEndTimeTo = new EbayParser.com.ebay.developer.ItemFilter(); 
       com.ebay.developer.ItemFilter filterCatID = new EbayParser.com.ebay.developer.ItemFilter(); 

       //Set Values for each filter 
       filterEndTimeFrom.name = EbayParser.com.ebay.developer.ItemFilterType.EndTimeFrom; 
       filterEndTimeFrom.value = new string[] { "" }; 

       filterEndTimeTo.name = EbayParser.com.ebay.developer.ItemFilterType.EndTimeTo; 
       filterEndTimeTo.value = new string[] { "" }; 

       filterCatID.name = EbayParser.com.ebay.developer.ItemFilterType.EndTimeFrom; 
       filterCatID.value = new string[] { "" }; 

       //Create the filter array 
       com.ebay.developer.ItemFilter[] itemFilters = new EbayParser.com.ebay.developer.ItemFilter[3]; 

       //Add Filters to the array 
       itemFilters[0] = filterCatID; 
       itemFilters[1] = filterEndTimeFrom; 
       itemFilters[2] = filterEndTimeTo; 

       request.itemFilter = itemFilters; 
       request.keywords = "ipod"; 

       // Creating response object 

       FindItemsAdvancedResponse response = service.findItemsAdvanced(request); 

,并在这里是被称为类的代码 “CustomFindingService.cs”

CustomFindingService .cs

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Net; 
using EbayParser.com.ebay.developer; 

namespace EbayParser 
{ 
    class CustomFindingService : FindingService 
    { 
     protected override System.Net.WebRequest GetWebRequest(Uri uri) 
     { 

      try 
      { 

       HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(uri); 

       request.Headers.Add("X-EBAY-SOA-SECURITY-APPNAME", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"); 

       request.Headers.Add("X-EBAY-SOA-OPERATION-NAME", "findItemsByKeywords"); 

       request.Headers.Add("X-EBAY-SOA-SERVICE-NAME", "FindingService"); 

       request.Headers.Add("X-EBAY-SOA-MESSAGE-PROTOCOL", "SOAP11"); 

       request.Headers.Add("X-EBAY-SOA-SERVICE-VERSION", "1.0.0"); 

       request.Headers.Add("X-EBAY-SOA-GLOBAL-ID", "EBAY-US"); 

       return request; 

      } 

      catch (Exception ex) 
      { 

       throw ex; 

      } 

     } 
    } 
} 
+0

我已经在上面的代码中删除了我的App-ID。 – 2010-09-01 19:51:15

+0

您是否使用过Fiddler来查看请求和响应? – Alan 2010-09-01 19:56:03

+0

我还没试过,但会。 如果我将“服务”对象更改为EbayFindingService而不是自定义类,而不是继承EbayFindingService,那么会出现“SOA标题缺失”错误 设置FindItemsAdvancedRequest项目标题的正确方法是什么? – 2010-09-01 20:06:12

回答

1

如果将任何过滤器留在过滤器数组中,您将得到SOA操作头丢失异常,无论您是否正确包含了头文件。

在将它们应用到您的请求之前,您应该检查过滤器是否为空。

2

当我从关键字查找到使用高级方法时,我遇到了完全相同的问题。我花了一段时间自己挠挠头,但事实证明有一个简单的修复:

您的标题X-EBAY-SOA-OPERATION-NAME读取findItemsByKeywords。将其更改为findItemsAdvanced应该可以做到。