2009-01-08 14 views
5

मैं अपने साइटों से एक अजीब त्रुटि मिल रही है कभी Windows 2008 64-बिट के उन्नयन के बाद से। मेरे पास 64-बिट मोड में चल रहे अधिकांश ऐप पूल हैं (सभी लेकिन एक, विरासत एएसपी.NET 1.1 एप्लिकेशन के लिए उपयोग किया जाता है)। 64-बिट पर चल रहे साइटों पर, मुझे ASP.NET AJAX से त्रुटियां मिल रही हैं।अजीब ASP.NET AJAX बग/32-बिट 64-बिट के लिए

Exception information: 
    Exception type: System.NotSupportedException 
    Exception message: Assembly "AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" does not contain a script with hash code "e2e86ef9". 

Request information: 
    Request URL: http://site.com/page.aspx?_TSM_HiddenField_=ctl00_ctl00_elScripto_HiddenField&_TSM_CombinedScripts_=%3B%3BAjaxControlToolkit%2C+Version%3D3.0.20820.16598%2C+Culture%3Dneutral%2C+PublicKeyToken%3D28f01b0e84b6d53e%3Afr-FR%3A707835dd-fa4b-41d1-89e7-6df5d518ffb5%3Ae2e86ef9%3A9ea3f0e2%3A9e8e87e9%3A1df13a87%3Ad7738de7 

Thread information: 
    Thread ID: 21 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace: at AjaxControlToolkit.ToolkitScriptManager.DeserializeScriptEntries(String serializedScriptEntries, Boolean loaded) in c:\AjaxControlToolkit_Admin\Release\AjaxControlToolkit\ToolkitScriptManager\ToolkitScriptManager.cs:line 534 
    at AjaxControlToolkit.ToolkitScriptManager.OutputCombinedScriptFile(HttpContext context) in c:\AjaxControlToolkit_Admin\Release\AjaxControlToolkit\ToolkitScriptManager\ToolkitScriptManager.cs:line 264 
    at AjaxControlToolkit.ToolkitScriptManager.OnInit(EventArgs e) in c:\AjaxControlToolkit_Admin\Release\AjaxControlToolkit\ToolkitScriptManager\ToolkitScriptManager.cs:line 198 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

त्रुटि CodePlex में एक ज्ञात समस्या प्रतीत होता है, लेकिन है कि मुझे बहुत मदद नहीं करता है। यहां समस्या का वर्णन करने वाला एक लिंक दिया गया है: http://dotnetdebug.net/2008/05/25/ajaxcontroltoolkit-toolkitscriptmanager-stringgethashcode-and-mixing-32bit-and-64bit-machinesprocesses/

मैं भार संतुलन का उपयोग नहीं कर रहा हूं और सोच रहा हूं कि मेरा एप्लिकेशन 32-बिट और 64-बिट मोड के बीच क्यों स्विच हो रहा है।

यह हो सकता है कि DLLs एक 64-बिट वास्तुकला या ऐसा ही कुछ के लिए संकलित किया जाना चाहिए? क्या कोई अजीब मुद्दे हैं जिनके बारे में मुझे पता होना चाहिए कि यह मेरे लिए इस मुद्दे का कारण बन सकता है?

उत्तर

3

यह स्ट्रिंग.गेटहाशकोड() परिणाम परिवर्तनों की तरह दिखता है जो डीएल को संकलित करने के लिए निर्धारित निर्देश के आधार पर बदलता है। मैं समझा नहीं सकता कि यह ढांचे के भीतर क्यों होता है जब आपका .NET 2.0+ ऐप पूल सभी 64-बिट होते हैं लेकिन एक समाधान है जिसे आप कोशिश कर सकते हैं यदि आप कोडेप्लेक्स के नवीनतम स्रोत को पकड़ने और कुछ पंक्तियों को बदलने के इच्छुक हैं ToolkitScriptManager।

मुझे नहीं पता कि उपलब्ध टिप्पणियों के आधार पर एक आधिकारिक फ़िक्स क्यों सबमिट नहीं किया गया है - शायद क्योंकि सभी समाधान मेरे रूप में बदसूरत हैं?

मैं टिप्पणियों में से एक में वर्णित के रूप SHA1 हैश दिनचर्या का उपयोग करके इसे ठीक करने का प्रयास किया है - तो पहले मैं ToolkitScriptManager कक्षा में SHA1Managed प्रदाता के एक स्थिर उदाहरण बनाया जिन्हें आप नीचे देख:

public class ToolkitScriptManager : ScriptManager 
{ 
    private static System.Security.Cryptography.SHA1Managed s = new System.Security.Cryptography.SHA1Managed(); 

//serializedScriptEntries.Append(scriptEntry.Name.GetHashCode().ToString("x", CultureInfo.InvariantCulture)); 
serializedScriptEntries.Append(Convert.ToBase64String(s.ComputeHash(System.Text.Encoding.UTF8.GetBytes(scriptEntry.Name)))); 
: एक बार SerializeScriptEntries समारोह में -

...

फिर वहाँ दो स्थानों पर जहां स्ट्रिंग हैश कोड इस्तेमाल किया जा रहा था कि मैं बाहर टिप्पणी की है और प्रतिस्थापित कर रहे हैं

और फिर एक बार DeserializeScriptEntries समारोह में:

//string hashCode = resourceName.GetHashCode().ToString("x", CultureInfo.InvariantCulture); 
string hashCode = Convert.ToBase64String(s.ComputeHash(System.Text.Encoding.UTF8.GetBytes(resourceName))); 

हो सकता है कि एक सरल विधि हमें सिर्फ इसलिए है कि हम 32-बिट और 64 के लिए एक ही परिणाम प्राप्त इस स्ट्रिंग serializing के लिए 64-बिट GetHashCode विधि का उपयोग करने की अनुमति होगी -बिट कॉल ...

+0

आशाजनक लग रहा है। मैं टूलकिट मैनेजर का अपना उदाहरण नहीं चलाऊंगा, लेकिन इस समाधान के लिए मतदान करने में खुशी होगी ताकि यह मुख्य उत्पाद में घुमाया जा सके। –

संबंधित मुद्दे