2013-03-16 3 views
7

में हमेशा के लिए मैं एक मुद्दा है जहाँ मेरे नेट वेब अनुरोध हमेशा किसी दिए गए CNAME के ​​लिए एक ही आईपी मार रहे हो रही है। सीएनएन कई आईपी पते से जुड़ा हुआ है, और जब भी DNS लुकअप होता है (एनएसlookup चलाने के माध्यम से पुष्टि की जाती है) तो उन आईपी पते यादृच्छिक क्रम में वापस आते हैं।नेट कैश डीएनएस सर्वर 2008

public void TestDNS() 
    { 
     while (true) 
     { 
      var ipAddress = Dns.GetHostAddresses("mywebsite.com").First().ToString(); 

      Console.WriteLine(string.Format("Current: '{0}' at: '{1}'", ipAddress, DateTime.Now.ToLongTimeString())); 

      Thread.Sleep(1000); 
     } 
    } 

मैं सभी मशीनों नवीनतम था पर सर्वर 2008 डेटासेंटर, सर्वर 2008 R2 डेटासेंटर, सर्वर 2012, विंडोज 7, और Windows 8 इस एप्लिकेशन को चलाने की है:

मैं इस परीक्षण करने के लिए एक सरल अनुप्रयोग लिखा था अद्यतन और सर्विस पैक उपलब्ध हैं।

केवल मशीन है कि विफल रहता है सर्वर 2008 हर दूसरी मशीन के बारे में एक बार एक मिनट (टीटीएल 1 मिनट है) आईपी पते बदल जाता है। सर्वर 2008 कभी स्विच नहीं करता (एक घंटे से अधिक के लिए भाग गया)।

स्पष्ट है कि, चल nslookup और मशीन पर अन्य उपकरणों से संकेत मिलता है कि DNS लौटा रहा है मैं वास्तव में क्या उम्मीद थी लगता है। यह समस्या सर्वर 2008

पर नेट के लिए विशिष्ट होना करने के लिए मेरे पास कोई सफलता के साथ इस संबंधित answer में सूचीबद्ध आइटम की कोशिश की है लगता है।

कोई विचार?

+0

आप DNS सर्वर वापसी एक मिल सकता है नहीं करना चाहते हैं प्रत्येक कॉल के लिए आईपी पते का पूरी तरह अलग सेट?यह आपको बताएगा कि क्या आइटम कैश किए जा रहे हैं, या अगर किसी कारण से रनटाइम केवल उन मानों को सॉर्ट कर रहा है जो लौटाए गए हैं। –

+0

अच्छा विचार @JimMischel। मैंने .NET अनुप्रयोग चलने के बाद DNS रिकॉर्ड बदलने की कोशिश की और कुछ भी नहीं बदला। ऐसा लगता है कि कोई भी DNS परिवर्तन नहीं ले रहा है (यानी, हमेशा के लिए कैश किया गया)। एकमात्र चीज जो मैंने पाया है वह मदद मेजबान फ़ाइल को अद्यतन कर रही है। अगर मैं ऐसा करता हूं, तो यह चल रहे .NET अनुप्रयोग के भीतर DNS को अद्यतन करता है। – manu08

+0

विधि GetHostAddresses() IPAddress प्रकार की एक सरणी देता है। मेरा जवाब देखें –

उत्तर

2

समाधान के रूप में, पिंग रिपोर्ट एक ही मुद्दा है? [System.Diagnostics.Process();]

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx

अगर आप समाधान को स्वीकार करेंगे, एक और संभव समाधान है कि होस्टनाम का समाधान या कमांड लाइन के माध्यम से आह्वान 3 पार्टी पुस्तकालय/कोड के लिए खोज की जाएगी।

आशा सहायता प्रदान की गई है।

+0

समस्या को ठीक करने के लिए * लगता है। मैंने अभी जो काम किया है वह .NET प्रक्रिया कमांड के माध्यम से wslookup का आविष्कार कर रहा है और मेजबान फ़ाइल को अद्यतन कर रहा है। यह एक हैक है, लेकिन यह आसान है, और यह काम करता है। आखिरकार मैं सर्वर 2012 में अपग्रेड कर रहा हूं, जिसमें यह समस्या नहीं है। – manu08

+0

यह जानकर अच्छा लगा कि ओएस अपडेट करना सबसे अच्छा कामकाज होगा। –

+0

यहां कोड है, यह मूल रूप से एक लक्षित यूआरएल लेता है, और मेजबान फ़ाइल में जितने चाहें उतने होस्टनामों को आईपी असाइन करेगा। https://github.com/reustmd/HostFileUpdater/tree/master/HostFileUpdater – manu08

0

आप सभी मशीनों पर एक ही नेट वातावरण चला रहे हैं, यानी अपने कोड एक ही लक्ष्य (x86 या 64) और एक ही .NET फ्रेमवर्क 2.0 या 3.5 या 4.0

+0

हां। मैं अलग-अलग मशीनों में कॉपी और पेस्टेड एक्सई और डीएलएल चिपकाता हूं। हर ओएस 64-बिट था। – manu08

+1

मुझे लगता है कि इसका मतलब यह नहीं है कि सभी के पास समान ढांचा है http://stackoverflow.com/questions/7084028/can-net-2-0-assemblies-run-under-net-4-0 –

+0

किसी भी तरह से मुझे लगता है कि यह फ्रेमवर्क एकीकरण के नेट फ्रेमवर्क में एक बग है, जिसे माइक्रोसॉफ्ट को सूचित किया जाना चाहिए लेकिन उनके पास बग रिपोर्टिंग पोर्टल नहीं है :( –

3

विधि GetHostAddresses() की एक सरणी रिटर्न को संकलित किया गया है IPAddress टाइप करें।

वापसी मूल्य

प्रकार: System.Net.IPAddress []

प्रकार IPAddress की एक सरणी है कि मेजबान कि hostNameOrAddress पैरामीटर द्वारा निर्दिष्ट किया जाता है के लिए आईपी पते रखती है।

अपने var को आईपीएड्रेस सरणी में बदलें। यहां उदाहरण दिया गया है:

public static void DoGetHostAddresses(string hostname) 
{ 
    IPAddress[] ips; 

    ips = Dns.GetHostAddresses(hostname); 

    Console.WriteLine("GetHostAddresses({0}) returns:", hostname); 

    foreach (IPAddress ip in ips) 
    { 
     Console.WriteLine(" {0}", ip); 
    } 
} 

अधिक जानकारी के लिए this page देखें।

1

आप रिकर्सिव क्वेरी कर रहे हैं। आप DNS सर्वर कैश करने के लिए किसी भी पुनरावर्ती प्रश्नों \ सेवाएं \ DNS \ पैरामीटर

HKEY_LOCAL_MACHINE \ SYSTEM पर नई DWORD "MaxCacheTtl" मान 0x0 के साथ \ CurrentControlSet बनाने

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