Что ж, eBay SDK имеет довольно хороший выбор примеров, но они устарели, большинство не будет работать, и вы получите NullReferenceException
на линии.Я был программистом Windows около 5 лет (5 лет назад, и знаю только достаточно .Net, чтобы справиться со мной. Я разрабатываю в основном крупномасштабные веб-приложения)
Это конкретное приложение опрашивает eBay APIчерез службу Windows через определенные промежутки времени и обновляет базу данных SQL с отложенными заказами для отправки.В этом нет необходимости, так как этот код прост и не является проблемой.
Здесь приведена строка более старого рассматриваемого кода VB .Net, имейте в виду, что intelliSense показывает код как действительный в представлении кода.
Dim Transactions As TransactionTypeCollection
Transactions = apiCall.GetSellerTransactions("1/1/2012 5:51:09 AM", "1/30/2012 5:51:09 AM")
Когда эта вторая строка кода запускается, я получаю эту ошибку:
NullReferenceException was unhandled
Object reference not set to an instance of an object.
Visual Studio предоставляет некоторые советы по устранению неполадок, такие как проверка того, что заданный объект не равен NULL (Nothing) перед вызовоми используя ключевое слово New для создания нового экземпляра объекта перед вызовом метода.Я перепробовал все комбинации этих методов, например:
Dim Transactions As New Transaction TypeCollection
или после определения транзакции,
Transactions = New apicall.getSellerTransaction()
'didnt think this would work but I've tried everything
Они не помогли, а также первый не вызвал дополнительных ошибок (во-вторых, как я предположил, вы знаете, что getSellerTransaction () не является конструктором).
Есть предложения?
Спасибо за чтение длинного поста, просто хотел быть максимально подробным.Кстати, я использую последний eBay .NET SDK от developer.ebay.com, пытаясь выполнить транзакцию getSellerTransaction.У меня были одинаковые проблемы при создании токенов, но это исправление было другим.Я думаю, что это синтаксическая ошибка.Спасибо за любую помощь.Я буду здесь, чтобы ответить на любые вопросы, если вам понадобится более подробная информация.
-Майк
Дополнительный код
Я использую простой потоковый преобразователь для сбора достаточного количества данных из транзакцийтак что я знаю, что они работают (когда я преодолею эту ошибку, отложенные ордера будут заполнены в виде данных SQL).Это также служба Windows (следовательно, theServiceWorkerThread
). Кроме того, демонстрационные приложения .Net, предоставляемые в eBay SDK (по крайней мере, для GetSellerTransactions завершается с тем же кодом ошибки, в том же месте)
Private Sub ServiceWorkerThread(ByVal state As Object)
' Periodically check if the service is stopping.
Do While Not Me.stopping
' Perform main service function here...
Dim apiCall As GetSellerTransactionsCall = New GetSellerTransactionsCall(apiContext)
Dim transactions As New TransactionTypeCollection
'the line below causes the exception
transactions = apiCall.GetSellerTransactions("1/1/2012 5:51:09 AM", "1/30/2012 5:51:09 AM")
Dim trans As New TransactionType
For Each trans In transactions
Me.sysLog.WriteEntry("ItemId: " & trans.Item.ItemID)
Me.sysLog.WriteEntry("TransId: " & trans.TransactionID)
Me.sysLog.WriteEntry("TransPrice: " & trans.TransactionPrice.Value.ToString())
Me.sysLog.WriteEntry("AmtPaid: " & trans.AmountPaid.Value.ToString())
Me.sysLog.WriteEntry("qtyPurchased: " & trans.QuantityPurchased.ToString())
Me.sysLog.WriteEntry("buyUserId; " & trans.Buyer.UserID)
Next trans
Thread.Sleep(60000) ' Simulate some lengthy operations.
Loop
' Signal the stopped event.
Me.stoppedEvent.Set()
End Sub
<summary>
Populate eBay SDK ApiContext instance with data from application configuration file
</summary>
<returns>ApiContext instance</returns>
<remarks></remarks>
Private Function GetApiContext() As ApiContext
'apiContext is a singleton
'to avoid duplicate configuration reading
If (apiContext IsNot Nothing) Then
Return apiContext
Else
apiContext = New ApiContext
'set Api Server Url
apiContext.SoapApiServerUrl = AppSettings("SopApiServerUrl")
'declare new ApiCredential
Dim apiCredential As ApiCredential = New ApiCredential
'set Applcation settings (not needed with a User Token)
apiCredential.ApiAccount.Application = AppSettings("AppId")
apiCredential.ApiAccount.Certificate = AppSettings("AppCert")
apiCredential.ApiAccount.Developer = AppSettings("DevId")
'set our User Token
apiCredential.eBayToken = AppSettings("UserToken")
apiContext.ApiCredential = apiCredential
'set eBay Site target to US
apiContext.Site = SiteCodeType.US
Return apiContext
End If
End Function