ええと、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