eBay .NET SDK导致我的Cache和Session重新启动

时间:2013-11-13 21:17:20

标签: .net api caching ebay

我在使用eBay .NET SDK(http://go.developer.ebay.com/developers/ebay/documentation-tools/sdks/dotnet

时遇到各种各样的问题

前几天发表这个问题:

HttpRuntime.Cache doesn't appear to be working

现在经过更多调查后,似乎实际上调用eBay API正在清除我的.NET Session和Cache数据,实际上重新启动了应用程序。

为什么?!!

似乎有问题的功能是我获取eBay类别的方法。上面的问题首先出现是因为我发现我无法缓存从eBay获得的令人难以置信的缓慢响应...但是,似乎我可以缓存它,但是函数中的某些东西导致应用程序重新启动。

以下是我获取类别的方法:

Shared Function DisplayCategories(Optional ParentId As Integer = 0, Optional Level As Integer = 1) As CategoryTypeCollection

    Dim Categories As New CategoryTypeCollection

    Dim apiContext As ApiContext = Credentials.GetApiContext()
    Dim apicall As New GetCategoriesCall(apiContext) With {
        .EnableCompression = True,
        .Site = SiteCodeType.UK,
        .LevelLimit = Level
    }
    If ParentId <> 0 Then _
        apicall.CategoryParent = New StringCollection({"" & ParentId & ""})

    apicall.DetailLevelList.Add(DetailLevelCodeType.ReturnAll)

    'SiteCodeType.UK, New StringCollection({"1"}), 10, False
    Categories = apicall.GetCategories()

    Return Categories

End Function

为简单起见,删除了所有缓存代码,但我可以向您保证,运行此函数会清除我的缓存和任何会话数据。

知道为什么吗?!!

1 个答案:

答案 0 :(得分:1)

我想我现在已经解决了这个问题......(两天之后,答案也相当简单)

原因是eBay SDK将其api日志文件存储在bin文件夹中,该文件夹在编辑时导致应用程序重新启动。我将这些代码行添加到global.asax

中的application_end
    Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the application ends

    Dim runtime As HttpRuntime = DirectCast(GetType(System.Web.HttpRuntime).InvokeMember("_theRuntime", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.[Static] Or Reflection.BindingFlags.GetField, Nothing, Nothing, Nothing), HttpRuntime)
    Dim shutDownMessage As String = DirectCast(runtime.[GetType]().InvokeMember("_shutDownMessage", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.GetField, Nothing, runtime, Nothing), String)
    Dim shutDownStack As String = DirectCast(runtime.[GetType]().InvokeMember("_shutDownStack", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.GetField, Nothing, runtime, Nothing), String)


End Sub

然后我检查了shutDownMessage并返回:

“更改关键目录的通知.bin目录更改或目录重命名HostingEnvironment启动关闭HostingEnvironment导致关闭更改关键目录通知.bin目录更改或目录重命名”

我瘦了检查了bin文件夹并低了,看到那里写的是eBayAPiLog.txt文件。

我现在已经更改了设置eBay日志文件的代码,以便将其存储在应用程序根目录中。

            'set Api logging
        ApiContext.ApiLogManager = New ApiLogManager
        Dim fileLogger As FileLogger = New FileLogger(String.Concat(AppConfig.SiteRootPath, "eBayAPI_log.txt"), True, True, True)
        ApiContext.ApiLogManager.ApiLoggerList.Add(fileLogger)

通过此更改,应用程序不再循环使用,会话和缓存仍然存在!