2008-11-19 7 views
14

में सी # से वेबपृष्ठ पर कॉल करें मुझे अपने .net appliction के अंदर से एक वेब पेज कॉल करने का एक तरीका चाहिए।कोड

लेकिन मैं सिर्फ पृष्ठ पर एक अनुरोध भेजना चाहता हूं और प्रतिक्रिया के बारे में चिंता नहीं करना चाहता हूं।

ऐसे समय होते हैं जब प्रतिक्रिया थोड़ी देर लग सकती है, इसलिए मैं इसे प्रशंसा नहीं करना चाहता हूं।

मैं पक्ष में Page_Load घटना कोशिश कर रहे हैं

WebClient webC = new WebClient(); 
Uri newUri = new Uri("http://localhost:49268/dosomething.aspx"); 
webC.UploadStringAsync(newUri, string.Empty); 

हालांकि Async करने के लिए अपने सेट, यह अभी भी पेज अभ्यस्त खत्म प्रतिपादन के रूप में लटका जब तक धागे System.Net.WebClient पर

उत्तर

12

डोक, लगभग वहां था, लेकिन हर बार जब मैं एक सेरेपेट थ्रेड में कोई अनुरोध करता हूं तो पृष्ठ तब भी प्रस्तुत नहीं होगा जब तक कि सभी धागे चलने लगे।

मुझे मिला सबसे अच्छा तरीका डोक की विधि को समायोजित कर रहा था, और बस वहां एक टाइमआउट चिपका रहा था और त्रुटि निगल रहा था।

मैं अपने एक हैक जानते हैं, लेकिन यह काम करता है: पी

WebRequest wr = WebRequest.Create("http://localhost:49268/dostuff.aspx"); 
wr.Timeout = 3500; 

try 
{ 
    HttpWebResponse response = (HttpWebResponse)wr.GetResponse(); 
} 
catch (Exception ex) 
{ 
    //We know its going to fail but that dosent matter!! 
} 
+0

पूछ रहा है, मुझे समय-समय पर इसे 3-5 सेकंड देने के लिए सबसे अच्छा मिला है। – TheAlbear

+1

कैच ब्लॉक समायोजित करें यदि आप जानना चाहते हैं कि टाइमआउट अपवाद का कारण था: 'पकड़ (WebException पूर्व) {if (ex.Status! = WebExceptionStatus.Timeout) पूर्व फेंक दें; } ' –

7

देखो finsished है तेजी , विशेष रूप से DownloadDataAsync() विधि का उपयोग शेष ऐप को अवरुद्ध किए बिना अनुरोध भेजने के लिए करें।

9

आपको लटकने के लिए आवेदन न करने के लिए आपको विधि को थ्रेड से कॉल करने की आवश्यकता होगी। DownloadDataCompleted/DownloadFileCompleted साथ संयोजन के रूप में

Thread myThread = new Thread(new ThreadStart(myMethodThatDoHttp)); 
    myThread.Start(); 
public void myMethodThatDoHttp() 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www..com"); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
} 
2

उपयोग System.Net.WebClient.DownloadDataAsync/DownloadFileAsync:

HTTP अनुरोध के लिए एक जवाब के बिना, ऐसा ही कुछ काम करना चाहिए।

+0

यह अभी भी बुला धागा लटका जब तक async धागा समाप्त हो गया है बनाता है .. ऐसा नहीं होना चाहिए, लेकिन यह करता है:/ – TheAlbear

13

यह आप के लिए काम करना चाहिए:

System.Net.WebClient client = new System.Net.WebClient(); 
client.DownloadDataAsync(new Uri("http://some.url.com/some/resource.html")); 

WebClient वर्ग फोन करने वाले को अधिसूचित जब अनुरोध पूरा हो गया है के लिए घटनाओं है, लेकिन जब से तुम परवाह नहीं है वहाँ यह करने के लिए कुछ और नहीं होना चाहिए।

+0

मैं मानता हूँ कि यह काम करना चाहिए, लेकिन वेब पेज अभ्यस्त जब तक धागे है broswer वापस करने के लिए प्रस्तुत करना समाप्त हो गया, इसलिए यह अभी भी – TheAlbear

3

इस प्रक्रिया को आपके वर्तमान पृष्ठ के पृष्ठ प्रवाह में बाधा डाले बिना, मैं एक डब्ल्यूसीएफ सेवा बनाने की अनुशंसा करता हूं जो आपके लिए कोड निष्पादित करेगा। सर्विस को 1 वे कॉल का उपयोग करने के लिए सेट करें और पृष्ठ पर सेवा में अजाक्स कॉल शुरू करें।

+0

लटका है, मुझे एक ही प्रोजेक्ट में मेरी सेवा और वेबसाइट पसंद है और एक दूसरे के साथ थक गया है, किसी भी विंडोज सेवा के साथ समस्या यह है कि 1. यह दुर्घटनाग्रस्त हो सकता है, क्या आप दुर्घटना को पकड़ने के लिए दूसरी सेवा लिखते हैं? 22 पकड़ें और यदि आप सर्वर/होस्ट ले जाते हैं, तो सर्वर आपके आईएसपी के माध्यम से रीसेट हो जाता है, तो सेवा आसानी से भुला दी जा सकती है। – TheAlbear

+0

डब्ल्यूसीएफ अक्सर आईआईएस के अंदर होस्ट किया जाता है, इसलिए कभी-कभी यह संभव है कि एक ऐप डोमेन ASP.NET को क्रैश कर सकता है और शायद एक अनुरोध या 2 खो देता है जो अक्सर एक घटना नहीं होती है। मुझे यकीन नहीं है कि दूसरा भाग –

2
  1. जहाँ तक मुझे 'BeginGetResponse'-विधि और' HttpWebRequest-वस्तु के EndGetResponse'-विधि के रूप में देख सकते हैं (WebRequest.Create के कॉल के माध्यम से प्राप्त), resp। BeginGetRequestStream-/EndGetRequestStream तरीकों, यहाँ, फिर भी परिलक्षित नहीं कर रहे हैं - हालांकि वे EXLPLICITLY एक "async अनुरोध" डॉक्स में के लिए चिह्नित कर रहे हैं:

    कोई सुराग, यह कैसे काम करता है।

  2. यदि कॉल करने वाला पृष्ठ एक ही आईआईएस/ऐप पर है।कॉलिंग के रूप में, आप एक फ़िल्टर लिख सकते हैं, जो क्लाइंट (आपके 'कॉलिंग' एएसपीएक्स-पेज) के लिए इस अनुरोध के लिए सभी सेवा समाप्त करता है, यदि मानचित्र-स्ट्रिंग में पृष्ठ के कॉल के लिए spec शामिल है (ISAPI-cpp: "वापसी में SF_STATUS_REQ_FINISHED; ") लेकिन शायद आपके एएसपी/एक्स/-स्क्रिप्ट-निष्पादन को बुलाए गए पृष्ठ में भी मार दिया गया है। चेक का सवाल

  3. सर्वर-पक्ष का उपयोग करने पर विचार करें निर्देश (कम शर्त योग्य) या गतिशील रूप से सर्वर का उपयोग करके .asp फ़ाइल को कॉल करें। निष्पादन।

  4. वास्तव में असिंक नहीं है, लेकिन शायद योग्य: सिस्टम को स्पष्ट रूप से एक प्रारंभिक प्रतिक्रिया द्वारा एंड्रॉइड() (या इसी तरह) द्वारा स्पष्ट किया गया है, कि किसी भी अन्य उत्तरदायी होने की उम्मीद नहीं है, मुख्य रूप से कॉलर को नहीं। फिर अपनी सामग्री CALLED पृष्ठ की स्क्रिप्ट में चल रही है। सिंक-कॉल के अंत का इंतजार करने के लिए कम-से-कम समय-पर्ची को 10, 100 या उससे भी कम के अंतर से कम किया जा सकता है।