Нужна помощь в преобразовании этой строки кода из vb .net 2005 ~ в vb .net 2010 (eBay .Net SDK) - PullRequest
0 голосов
/ 01 февраля 2012

Что ж, 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

1 Ответ

3 голосов
/ 01 февраля 2012

Проблема не в Transactions, являющемся Nothing, а в apiCall, являющемся Nothing.

. Убедитесь, что apiCall инициализировано в правильное значение.

...