Что ж, в eBay SDK есть неплохой набор примеров, но они устарели, большинство из них не будут работать, и вы получите NullReferenceException
в строке. Я был кодировщиком Windows около 5 лет (причем 5 лет назад, и знаю только .Net достаточно, чтобы обойтись. Я разрабатываю в основном крупномасштабные веб-приложения)
Это конкретное приложение опрашивает API eBay через службу 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 (ничего) перед вызовом, и использование ключевого слова 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