2013-05-24 9 views
20

मैंने एक ऐप लिखा है जिसने महीनों के लिए ठीक काम किया है, पिछले कुछ दिनों में मुझे केवल स्थापित संस्करण पर त्रुटि मिल रही है।रिमोट सर्वर ने एक त्रुटि लौटा दी: (403) निषिद्ध

यदि मैं वीएस में स्रोत कोड चलाता हूं तो सब ठीक काम करता है। इसके अलावा, बिन फ़ोल्डर्स में .exe ठीक काम करता है। यह केवल स्थापित संस्करण है जो त्रुटि उत्पन्न करता है, अगर मैं पुन: संकलित करता हूं और पुनर्स्थापित करता हूं तो मुझे एक ही त्रुटि मिलती है।

मैं इस कारण के कारण थोड़ा सा स्टंप हूं और कुछ पॉइंटर्स की आशा करता हूं। ऐसा लगता है कि आईई के माध्यम से एक वेबरक्वेट प्रतिक्रिया वापस नहीं आ रही है, लेकिन मुझे लगता है कि यह किसी भी त्रुटि के बिना वीएस में ठीक क्यों काम करता है। क्या कोई नया आईई सुरक्षा उपायों/नीतियां हैं जो इसका कारण बन सकती हैं?

चीजें मैं अब तक की कोशिश की है में शामिल हैं:

  • अक्षम सभी एंटीवायरस & फ़ायरवॉल
  • प्रशासक के रूप में चलाने के

अपवाद:

Exception: System.Windows.Markup.XamlParseException: The invocation of the constructor on type 'XApp.MainWindow' that matches the specified binding constraints threw an exception. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden. 
    at System.Net.HttpWebRequest.GetResponse() 
    at XApp.HtmlRequest.getHtml(Uri uri) in J:\Path\MainWindow.xaml.cs:line 3759 
    at XApp.MainWindow.GetLinks() in J:\Path\MainWindow.xaml.cs:line 2454 
    at XApp.MainWindow..ctor() in J:\Path\MainWindow.xaml.cs:line 124 
    --- End of inner exception stack trace --- 
    at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) 
    at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) 
    at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) 
    at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc) 
    at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties) 
    at System.Windows.Application.DoStartup() 
    at System.Windows.Application.<.ctor>b__1(Object unused) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 
Exception: System.Net.WebException: The remote server returned an error: (403) Forbidden. 
    at System.Net.HttpWebRequest.GetResponse() 
    at XApp.HtmlRequest.getHtml(Uri uri) in J:\Path\MainWindow.xaml.cs:line 3759 
    at XApp.MainWindow.GetLinks() in J:\Path\MainWindow.xaml.cs:line 2454 
    at XApp.MainWindow..ctor() in J:\Path\MainWindow.xaml.cs:line 124 

संपादित करें:

यह एक स्टैंडअलोन ऐप के रूप में स्थापित है। जब मैं व्यवस्थापक के रूप में चलाता हूं, तो मैंने प्रोग्राम फ़ोल्डर खोला है और शॉर्टकट के बजाय exe को व्यवस्थापक के रूप में चलाया है।

कोड कि इस मुद्दे का कारण बनता है इस

private void GetLinks() 
{ 
    //Navigate to front page to Set cookies 
    HtmlRequest htmlReq = new HtmlRequest(); 

    OLinks = new Dictionary<string, List<string>>(); 

    string Url = "http://www.somesite.com/somepage"; 
    CookieContainer cookieJar = new CookieContainer(); 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); 
    request.CookieContainer = cookieJar; 

    request.Accept = @"text/html, application/xhtml+xml, */*"; 
    request.Referer = @"http://www.somesite.com/"; 
    request.Headers.Add("Accept-Language", "en-GB"); 
    request.UserAgent = @"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"; 
    request.Host = @"www.somesite.com"; 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    String htmlString; 
    using (var reader = new StreamReader(response.GetResponseStream())) 
    { 
     htmlString = reader.ReadToEnd(); 
    } 

    //More Code 


} 
+1

सबसे पहले आपका कोड क्या है? फिर, अगर मैं आप थे, तो मैं फिडलर का उपयोग कर HTTP संदेशों की निगरानी करने की कोशिश करता हूं, और काम करने की तुलना करता हूं और कामकाजी अनुरोध नहीं करता हूं। –

+1

आप अपने "स्थापित संस्करण" को कैसे चलाते हैं - एक सेवा के रूप में या यह नियमित कंसोल/डेस्कटॉप एप्लिकेशन है? आपको यह सत्यापित करने का प्रयास करना चाहिए कि कौन सा उपयोगकर्ता संदर्भ एप्लिकेशन चलाया गया है। क्या आप प्रशासक के रूप में अपना आवेदन चलाने के लिए क्या किया है, इस पर विस्तार से बता सकते हैं? कृपया अपने एप्लिकेशन आर्किटेक्चर के बारे में थोड़ी अधिक जानकारी प्रदान करें - कौन से कनेक्शन स्थापित किए गए हैं। क्या यह एक सर्वर या ग्राहक है? – Marcus

उत्तर

14

निम्न पंक्ति जोड़ें। अगर यह 403 लौट रहा है, तो स्पष्ट रूप से यह प्रमाणीकरण की उम्मीद कर रहा है।

यह भी संभव है कि आप (अब?) में आपके और दूरस्थ साइट के बीच एक प्रामाणिक प्रॉक्सी हो। इस मामले में, कोशिश करें:

request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials; 

उम्मीद है कि इससे मदद मिलती है।

+0

देरी के लिए खेद है, मैं बस परीक्षण कर रहा था। आपके पहले सुझाव ने समस्या हल कर दी है। आपका बहुत बहुत धन्यवाद! – user3357963

+0

काम नहीं करता है ... –

2

यह एक अनुमतियाँ त्रुटि है। आपका वीएस शायद स्थापित संस्करण का उपयोग कर उपयोगकर्ता के मुकाबले एक उन्नत खाते या अलग-अलग उपयोगकर्ता खाते का उपयोग कर चलाता है।

आपकी आईआईएस अनुमतियों की जांच करना और यह देखने के लिए उपयोगी हो सकता है कि आपके द्वारा उपयोग किए जा रहे संसाधनों के किन खातों तक पहुंच है। क्रॉस संदर्भ जो आपके द्वारा उपयोग किए जाने वाले खाते और स्थापित संस्करणों का उपयोग कर रहे हैं।

request.UseDefaultCredentials = true; 

यह आवेदन साइट तक पहुँचने के लिए उपयोगकर्ता के प्रवेश के क्रेडेंशियल्स का उपयोग करने देगा:

+0

वे कहते हैं कि उन्होंने प्रशासक के रूप में चलाने की कोशिश की है। –

+0

क्या व्यवस्थापक खाते को अनुरोध प्राप्त करने वाले वेब सर्वर पर अनुमति है? ध्यान में रखते हुए MyLocalPC \ Administrator और server \ Administrator एक ही खाता नहीं हैं – James

13

ऐसा लगता है कि समस्या सर्वर पक्ष पर आधारित है।

इम मेरे मामले मैं paypal सर्वर के साथ काम किया और सुझाव दिया जवाब में से न तो मदद की, लेकिन http://forums.iis.net/t/1217360.aspx?HTTP+403+Forbidden+error

I was facing this issue and just got the reply from Paypal technical. Add this will fix the 403 issue. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.UserAgent = "[any words that is more than 5 characters]";

+0

यह "निषिद्ध" समस्या का समाधान था जिसे गिटहब एपीआई का उपयोग करने का प्रयास करते समय मुझे सामना करना पड़ा। इससे पहले कि मैं इस पोस्ट में ठोकर खाई, इसमें कई घंटे लग गए। –

+1

। यूज़र एजेन्ट एक उत्पादन सर्वर पर मेरे लिए था। मुझे लगता है कि मैंने आईआईएस को निर्दिष्ट एजेंट के बिना अनुरोधों को प्रतिबंधित करने के लिए सेट किया होगा। – secretwep

+0

ditto Spotify एटीओएम फ़ीड – planetClaire

0
private class GoogleShortenedURLResponse 
    { 
     public string id { get; set; } 
     public string kind { get; set; } 
     public string longUrl { get; set; } 
    } 

    private class GoogleShortenedURLRequest 
    { 
     public string longUrl { get; set; } 
    } 

    public ActionResult Index1() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult ShortenURL(string longurl) 
    { 
     string googReturnedJson = string.Empty; 
     JavaScriptSerializer javascriptSerializer = new JavaScriptSerializer(); 

     GoogleShortenedURLRequest googSentJson = new GoogleShortenedURLRequest(); 
     googSentJson.longUrl = longurl; 
     string jsonData = javascriptSerializer.Serialize(googSentJson); 

     byte[] bytebuffer = Encoding.UTF8.GetBytes(jsonData); 

     WebRequest webreq = WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url"); 
     webreq.Method = WebRequestMethods.Http.Post; 
     webreq.ContentLength = bytebuffer.Length; 
     webreq.ContentType = "application/json"; 

     using (Stream stream = webreq.GetRequestStream()) 
     { 
      stream.Write(bytebuffer, 0, bytebuffer.Length); 
      stream.Close(); 
     } 

     using (HttpWebResponse webresp = (HttpWebResponse)webreq.GetResponse()) 
     { 
      using (Stream dataStream = webresp.GetResponseStream()) 
      { 
       using (StreamReader reader = new StreamReader(dataStream)) 
       { 
        googReturnedJson = reader.ReadToEnd(); 
       } 
      } 
     } 

     //GoogleShortenedURLResponse googUrl = javascriptSerializer.Deserialize<googleshortenedurlresponse>(googReturnedJson); 

     //ViewBag.ShortenedUrl = googUrl.id; 
     return View(); 
    } 
+3

स्पष्टीकरण के बिना उत्तर न दें। कृपया बताएं कि आप क्या सिफारिश कर रहे हैं। यह कोड का एक बड़ा ब्लॉक है जो प्रश्न का उत्तर दे सकता है, लेकिन कुछ विस्तार के साथ जोड़ा जाना चाहिए। –

0

यह शायद बहुत सारे लोग मदद नहीं करेगा, लेकिन यह मेरे मामले था: मैं उपयोग कर रहा था जिरा रेस्ट एपी और मेरे व्यक्तिगत प्रमाण-पत्रों का उपयोग कर रहा था (जिन्हें मैं जिरा में लॉग इन करने के लिए उपयोग करता हूं)। मैंने अपना जिरा पासवर्ड अपडेट किया था लेकिन उन्हें मेरे कोड में अपडेट करना भूल गया था।मुझे 403 त्रुटि मिली, मैंने कोड में अपना पासवर्ड अपडेट करने का प्रयास किया लेकिन फिर भी त्रुटि मिली।

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

0

मेरे मामले में मुझे याद आया कि कुछ समय पहले इस पते के लिए फ़ायरवॉल में एक छेद बनाया गया था, इसलिए मुझे कॉन्फ़िगरेशन फ़ाइल में बाध्यकारी पर उपयोग DefaultWebProxy = "false" सेट करना था, जैसे डिफ़ॉल्ट का उपयोग करना था प्रॉक्सी अगर उपयोग करें DefaultWebProxy निर्दिष्ट नहीं है।

0

स्थापना:

request.Referer = @"http://www.somesite.com/"; 

और cookies जोड़ने मुझे

0

के लिए काम किया तुलना में हम नाम प्रमाणपत्र में दिए गए का उपयोग कर वेबसाइट का उपयोग करना चाहिए। enter image description here

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