我在使用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
为简单起见,删除了所有缓存代码,但我可以向您保证,运行此函数会清除我的缓存和任何会话数据。
知道为什么吗?!!
答案 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)
通过此更改,应用程序不再循环使用,会话和缓存仍然存在!