c# - "त्रुटि: 1 9-Azure डेटाबेस में OWIN पहुंच के साथ" भौतिक कनेक्शन उपयोग योग्य नहीं है "




razor azure-sql-database (2)

मैंने डरावनी "त्रुटि 1 9" पर अन्य सभी पोस्टिंग की कोशिश की है और पाया है कि उत्तर वाले कुछ लोग लागू नहीं होते हैं या मदद नहीं करते हैं, इसलिए यह नई पोस्ट। यह सभी Azure + EF उपयोगकर्ताओं के लिए एक बहुत ही गंभीर संभावित समस्या है।

पहली घटना:

मैं एक वीएस2013 ईएफ 6.1 रेजर प्रोजेक्ट (अंत में सूचीबद्ध संकुल) में सबकुछ का नवीनतम संस्करण उपयोग कर रहा हूं। डेटाबेस एसक्यूएल Azure पर होस्ट किया गया है।

मेरे वेबपैप को कुछ समय (एक देव वातावरण में) चलाने के बाद मुझे यह त्रुटि मिलती है: A transport-level error has occurred when receiving results from the server. (provider: Session Provider, error: 19 - Physical connection is not usable) A transport-level error has occurred when receiving results from the server. (provider: Session Provider, error: 19 - Physical connection is not usable)

जिस रेखा पर यह मर जाता है वह हमेशा होता है:

मैं कनेक्शन को पूलिंग (और कनेक्शन से बाहर चलने) से संबंधित त्रुटि इकट्ठा करता हूं, लेकिन मैं कहीं भी रिसाव नहीं लगा सकता।

चूंकि मैं पूरे ऐप में ओविन सदस्यता और अन्य डेटाबेस सुविधाओं तक पहुंचता हूं, मेरे पास एक डेटाबेस कंटोलर होता है जिससे अन्य सभी नियंत्रकों का उत्तराधिकारी होता है। यह सभी प्रासंगिक घटकों और उनके निपटान बनाता है।

DatabaseController.cs

[Authorize]
public class DatabaseController : Controller
{
    #region properties
    /// <summary>
    /// User manager - attached to application DB context
    /// </summary>
    protected UserManager<ApplicationUser> UserManager { get; set; }

    /// <summary>
    /// Role manager - attached to application DB context
    /// </summary>
    protected RoleManager<IdentityRole> RoleManager { get; set; }

    /// <summary>
    /// Application DB context
    /// </summary>
    protected ApplicationDbContext ApplicationDbContext { get; set; }

    /// <summary>
    /// Database context used by most controllers
    /// </summary>
    protected ApplicationEntities Context { get; set; }
    #endregion properties

    #region Constructors
    public DatabaseController()
    {
        this.Context = new ApplicationEntities ();
        this.ApplicationDbContext = new ApplicationDbContext();
        this.UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(this.ApplicationDbContext));
        this.RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(this.ApplicationDbContext));
        this.UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };
    }
    #endregion Constructors

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            if (UserManager != null)
            {
                this.UserManager.Dispose();
                this.UserManager = null;
            }
            if (this.RoleManager != null)
            {
                this.RoleManager.Dispose();
                this.RoleManager = null;
            }
            if (this.ApplicationDbContext != null)
            {
                this.ApplicationDbContext.Dispose();
                this.ApplicationDbContext = null;
            }
            if (this.Context != null)
            {
                this.Context.Dispose();
                this.Context = null;
            }
        }
        base.Dispose(disposing);
    }
}

पैकेज स्थापित

  <package id="Antlr" version="3.5.0.2" targetFramework="net45" />
  <package id="bootstrap" version="3.1.1" targetFramework="net45" />
  <package id="EntityFramework" version="6.1.0" targetFramework="net45" />
  <package id="jQuery" version="1.11.0" targetFramework="net45" />
  <package id="jQuery.Validation" version="1.11.1" targetFramework="net45" />
  <package id="json2" version="1.0.2" targetFramework="net45" />
  <package id="Microsoft.AspNet.Identity.Core" version="2.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Identity.EntityFramework" version="2.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Identity.Owin" version="2.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Mvc" version="5.1.1" targetFramework="net45" />
  <package id="Microsoft.AspNet.Razor" version="3.1.2" targetFramework="net45" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi" version="5.1.2" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.1.2" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.1.2" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.2" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages" version="3.1.2" targetFramework="net45" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.1.2" targetFramework="net45" />
  <package id="Microsoft.Owin" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.Cookies" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.Facebook" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.Google" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.MicrosoftAccount" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.OAuth" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.Twitter" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
  <package id="Modernizr" version="2.7.2" targetFramework="net45" />
  <package id="Newtonsoft.Json" version="6.0.2" targetFramework="net45" />
  <package id="Owin" version="1.0" targetFramework="net45" />
  <package id="Owin.Security.Providers" version="1.3.1" targetFramework="net45" />
  <package id="Respond" version="1.4.2" targetFramework="net45" />
  <package id="WebGrease" version="1.6.0" targetFramework="net45" />

मान लीजिए कि यह एक कनेक्शन रिसाव है, मैं रिसाव के स्रोत को कैसे ट्रैक कर सकता हूं?

अगर आपको कोई और जानकारी चाहिए, तो बस पूछें।

अद्यतन: 22 मई 2014 द्वितीय बाउंटी की पेशकश की

मुझे अभी भी वही समस्या है, आखिरी पोस्टिंग के बाद से कुछ मामूली परियोजना परिवर्तन किए गए हैं, इसलिए जल्द ही नीचे नवीनतम विवरण पोस्ट करेंगे।

मैंने Connection Lifetime=3;Max Pool Size=3; जोड़ा है Connection Lifetime=3;Max Pool Size=3; इस पोस्ट के आधार पर, मेरे कनेक्शन तारों के लिए।

अद्यतन: 23 मई 2014 त्रुटि अभी भी होती है

अगले दिन, कुछ दर्जन बार डीबग करने के बाद, यह त्रुटि लौट आई।

अद्यतन: 11 जून 2014

2 बक्षीस और अनगिनत Google जांच के बाद (इसका कोई वास्तविक जवाब नहीं), मुझे यह मानना ​​है कि यह एंटिटी फ्रेमवर्क 6 में एक दोष है, कि मैं किसी भी तरह से दिखने वाला हूं।

अधिक जानकारी:

मुझे WinForm प्रोजेक्ट में एक ही त्रुटि थी, Azure से कनेक्ट करें। इस उदाहरण में मैं गलती से प्रत्येक 20 नए आइटम जोड़े जाने के बाद एक इकाई सूची को साफ़ नहीं कर रहा था।

हर बार जब कोड चलाता है तो उसने 20 और रिकॉर्ड जोड़े और DateModified फ़ील्ड को उन सभी पर अपडेट किया। जब तक यह 1700 रिकॉर्ड अपडेट हो गया, तब तक अचानक डर गया "त्रुटि 1 9 - भौतिक कनेक्शन प्रयोग योग्य नहीं है"। इसके बाद मुझे काम करने के लिए अपने डीबग आईआईएस को फिर से शुरू करने की आवश्यकता थी।

स्पष्ट रूप से कोड ने बड़ी संख्या में अपडेट चलाए थे, और शायद इसके बारे में कुछ किसी चीज़ के बारे में सोचने में मदद करेगा।


त्रुटि 1 कॉम त्रुटि नहीं है! (या सिर्फ एक कॉम त्रुटि नहीं)

बस सुनिश्चित करें कि आपके पास सभी आवश्यक हैं .Include(x=>x.ForeignTable) आपके LINQ से SQL क्वेरी में कॉल करता है!

अगस्त 2015 को अपडेट किया गया (कम से कम , कुछ परिदृश्यों के लिए संभावित समाधान):

इस समस्या पर हमारे पास सिर्फ 100% रेपो केस था, कि हम परीक्षण और त्रुटि परीक्षण के साथ हल करने में सक्षम थे, इसलिए यह एक समाधान हो सकता है या कम से कम सुराग प्रदान कर सकता है कि क्या देखना है।

परिदृश्य:

  • आईआईएस के तहत चलने वाली रिलीज के तहत केवल त्रुटि उत्पन्न हुई। यह डीबग या आईआईएस एक्सप्रेस के तहत नहीं हुआ था।
  • हमने यह देखने के लिए एसक्यूएल प्रोफाइलिंग भी चालू की कि सर्वर कब / कहां मारा गया था।
  • प्रश्न में पूछताछ मिलान रिकॉर्ड प्राप्त कर रही थी, फिर परिणामों के एक foreach पुनरावृत्ति (यानी आलसी मूल्यांकन) में दृश्य-मॉडल बनाना। व्यू-मॉडल क्वेरी किए गए इकाई की संबंधित तालिका में किसी मान पर निर्भर था।

परिक्षण:

पहला प्रयास: क्वेरी पर किसी भी जटिल फ़िल्टर को हटा दें

  • परिणाम: त्रुटि 1 9 के साथ अभी भी असफल रहा

दूसरा प्रयास: प्रश्न को तुरंत पूरा करने के लिए क्वेरी को मजबूर करने के लिए क्वेरी में ToList() जोड़ें।

  • परिणाम: सफल !!! (जाहिर है यहां कुछ चल रहा है)

तीसरा प्रयास: संबंधित डेटा को शामिल करने के लिए क्वेरी में ToList() को जोड़ें और जोड़ें .Include(x=>x.ForeignTable)

  • परिणाम: सफलता !

मेरा नया सिद्धांत है:

यदि आप गलती से एक विदेशी तालिका को शामिल करते हैं, तो ईएफ यादृच्छिक रूप से मूल्यांकन करते समय संबंधित डेटा लाने में यादृच्छिक रूप से विफल हो जाएगा। इसके बाद यह कुख्यात त्रुटि 1 9 का कारण बन सकता है।

चूंकि पहचान फ्रेमवर्क में विदेशी-महत्वपूर्ण संबंध हैं, तो आप मान सकते हैं कि एक गायब भी है। OWIN के भीतर कहीं भी एक क्वेरी पर शामिल करें .Include() , या समकक्ष। ओविन या अन्य प्रश्नों का उपयोग करते समय यह यादृच्छिक समस्या पैदा कर सकता है।

टिप्पणियाँ:

  • दूर करने का एक महत्वपूर्ण बिंदु यह है कि त्रुटि 1 कॉम त्रुटि नहीं है। प्रश्न SQL सर्वर हिट करते हैं। यह संबंधित डेटा लाने में असफल होने के साथ क्लाइंट-साइड की समस्या है।

प्रशंसा के लिए रोकें (हम इसे पाने में बहुत खुश हैं) :)

28 अगस्त 2015 को अपडेट किया गया:

स्थानीय SQL डेटाबेस से कनेक्ट होने पर बस फिर से डरावनी त्रुटि 1 9 थी (आमतौर पर यह मेरे लिए Azure के साथ एक समस्या थी)। उपर्युक्त परिणामों के आधार पर मैंने बस एक जोड़ा .Include(x=>x.ForeignTable) कथन जहां उचित और समस्या गायब हो गई! ऐसा लगता है कि यह ईएफ की समस्या हमेशा आलसी लोड से संबंधित तालिका की जानकारी में सक्षम नहीं है।


क्या आपने SqlAzureExecutionStrategy को आजमाया था? लगता है जैसे कनेक्शन काटा जाता है, लेकिन इस रणनीति ईएफ के साथ पुनः कनेक्ट करने के लिए स्वचालित रूप से पुनः प्रयास किया जाना चाहिए।

http://msdn.microsoft.com/en-us/data/dn456835.aspx





connection-pooling