0

ええと、eBay SDKにはかなり良い例の選択肢がありますが、それらは時代遅れであり、ほとんどは機能せず、あなたNullReferenceExceptionはオンラインになります。私は約5年間Windowsコーダーでした(5年前のことで、私を理解するのに十分な.Netしか知りません。私は主に大規模なWebベースのアプリケーションを開発しています)

この特定のアプリケーションは、指定された間隔でWindowsサービスを介してeBay APIをポーリングし、出荷される保留中の注文で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")

この2行目のコードを実行すると、次のエラーが発生します。

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

これらは役に立ちませんでした。また、最初のエラーは追加のエラーを生成しませんでした(2番目のエラーは、getSellerTransaction()がコンストラクターではないことを示しています)。

助言がありますか?

長い投稿を読んでくれてありがとう、できるだけ徹底的にしたかっただけです。ところで、getSellerTransactionを実行しようとしているdeveloper.ebay.comの最新のeBay.NETSDKを使用しています。でトークンを生成するときに同様の問題が発生しましたが、その修正は異なりました。構文エラーだと思います。助けてくれてありがとう。詳細が必要な場合は、私がここに質問に答えます。

-マイク

追加コード

単純なストリームライターを使用して、トランザクションから十分なデータをキャプチャし、トランザクションが機能することを確認しています(このバグを乗り越えると、保留中の注文がSQLデータソースに入力されます)。これもWindowsサービスです(したがってtheServiceWorkerThread)また、eBay SDKで提供される.Netデモアプリケーション(少なくとも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
4

1 に答える 1

3

問題は存在することではなくTransactionsNothing存在するapiCallことNothingです。

apiCallが適切な値に初期化されていることを確認してください。

于 2012-02-01T12:42:24.660 に答える