2012-01-18 11 views
5

मैं छवियों को पुनर्प्राप्त करने के लिए एएसएक्स अनुरोध हैंडलर का उपयोग कर रहा हूं और एएसएक्स फ़ाइल में मेरा ब्रेकपॉइंट हिट नहीं किया जा रहा है। जब मैं फ़ायरबग का उपयोग करता हूं तो मैं देख सकता हूं कि अनुरोध 404 लौटा रहा है जो मुझे लगता है कि मुझे कुछ सेटिंग कॉन्फ़िगर करने की आवश्यकता है ताकि एएसएक्स फ़ाइल मिल सके।asp.net ashx अनुरोध 404

मैं विजुअल स्टूडियो 2008 और .NET 3.5 का उपयोग कर रहा हूं।

ashx फ़ाइल

namespace hybrid.content.Handlers 
{ 
public class DB_Images : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     Int32 image_id; 
     if (context.Request.QueryString["id"] != null) 
      image_id = Convert.ToInt32(context.Request.QueryString["id"]); 
     else 
      throw new ArgumentException("No parameter specified"); 

     context.Response.ContentType = "image/jpeg"; 
     Stream strm = GetImageFromDatabase(image_id); 
     if (strm != null) 
     { 
      byte[] buffer = new byte[4096]; 
      int byteSeq = strm.Read(buffer, 0, 4096); 

      while (byteSeq > 0) 
      { 
       context.Response.OutputStream.Write(buffer, 0, byteSeq); 
       byteSeq = strm.Read(buffer, 0, 4096); 
      } 
      //context.Response.BinaryWrite(buffer); 
     } 
    } 

    public Stream GetImageFromDatabase(int image_id) 
    { 
     SqlConnectionStringBuilder connstr = new SqlConnectionStringBuilder(); 
     //connstr.InitialCatalog = "dummy"; 
     //connstr.UserID = "sa"; 
     //connstr.Password = "password"; 
     //connstr.DataSource = "source"; 
     connstr.InitialCatalog = "smsdb"; 
     connstr.UserID = "user"; 
     connstr.Password = "password"; 
     connstr.DataSource = "10.31.4.79"; 

     SqlConnection conn = new SqlConnection(connstr.ConnectionString); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = conn; 
     //   cmd.CommandText = "select image from cis_images where image_id = @p_image_id"; 
     cmd.CommandText = "select image from test_images where image_id = @p_image_id"; 
     cmd.Parameters.AddWithValue("@p_image_id", image_id); 
     conn.Open(); 
     object img = cmd.ExecuteScalar(); 
     try 
     { 
      return new MemoryStream((byte[])img); 
     } 
     catch 
     { 
      return null; 
     } 
     finally 
     { 
      conn.Close(); 
      conn.Dispose(); 
     } 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
    } 
} 

पृष्ठ क्लिक करें घटना

protected void Button1_Click(object sender, EventArgs e) 
    { 
     Image1.ImageUrl = "~/DB_Images.ashx?id=" + TextBox1.Text; 
    } 

ashx एचटीएमएल

<%@ WebHandler Language="C#" CodeBehind="DB_Images.ashx.cs" Class="hybrid.content.Handlers.DB_Images" %> 

वहाँ किसी भी html नहीं है उस संदर्भ के अलावा।

क्या ऐसा कुछ है जो मुझे काम करने के लिए याद आ रही है?

+0

क्या आप हैंडलर के "एचटीएमएल" दृश्य पर जो पेस्ट कर सकते हैं उसे पेस्ट कर सकते हैं? (एएसएक्स फ़ाइल की सामग्री) –

+0

आईआईएस सेटअप हैंडलर की सेवा करने के लिए? –

+0

@TheSavage आईआईएस हैंडलर की सेवा के लिए सेटअप है। –

उत्तर

1

यदि आप एएसपी.नेट में जेनेरिक हैंडलर का उपयोग कर रहे हैं, तो जांच करने के लिए कुछ चीजें हैं।

1.) सुनिश्चित करें कि आपने अपने आवेदन पूल में 32 बिट पर "32 बिट एप्लिकेशन" ध्वज सेट किया है, यदि यह वास्तव में 32 बिट है। डिफॉल्ट गलत है"।

2.)) क्लासिक

3. करने के लिए एकीकृत से अनुप्रयोग पूल मुड़ें अपने अनुप्रयोग पूल में नेट संस्करण उचित रूप से बदलें। आपके मामले में, v2 का उपयोग करें, क्योंकि 3.5 संस्करण 2 का उपयोग करता है। .NET 4.0 .NET 4.0 का उपयोग करता है।

4.) सुनिश्चित करें कि एएसपी.नेट पंजीकृत है। कोड ब्लॉक में सबकुछ चलाएं।

C: \>cd C:\Windows\Microsoft.NET\Framework64\{version} C: \ Windows \ Microsoft.NET \ Framework64 {version}>aspnet_regiis.exe -i

5.) सही सर्वर नाम (नहीं साइट क्लिक करने के बाद "ISAPI & सीजीआई प्रतिबंध" चुनें नाम) IIS प्रबंधक में, और सही "एएसपी.NET {संस्करण}" पंक्ति पर राइट क्लिक करें और "अनुमति दें" चुना है।

6.) सुनिश्चित करें कि आपके पास हैंडलर मैपिंग्स (* .ashx के लिए) चालू है (उर्फ "सक्षम") सर्वर स्तर पर, या साइट स्तर या स्पष्ट रूप से web.config में।

+1

क्या आप चरण # 6 पर विस्तार से बता सकते हैं? मैंने web.config में अपना विशिष्ट ASHX पंजीकृत किया है लेकिन मुझे यकीन नहीं है कि '* .ashx' – Tim

+0

द्वारा आपका क्या मतलब है" मैंने "अनुमोदित" लिखा है। मुझे "सक्षम" लिखा जाना चाहिए था। इसे पकड़ने के लिए धन्यवाद। – MacGyver

+0

टिम, मैं फिर से अपने उद्देश्यों के लिए इस पर वापस आ रहा हूं। # 4 और # 5 एक साथ जाओ। # 6 पूरी तरह से अलग है। क्षमा करें मैंने आपकी आखिरी टिप्पणी में आपको गलत जानकारी का खुलासा किया। # 4 और # 5 विशिष्ट .NET संस्करण के लिए एएसपी.NET द्वारा एएसएक्स फ़ाइलों को स्थापित (और चालू/अनुमति) की अनुमति दें (डिफ़ॉल्ट रूप से केवल v2। * आईआईएस में है)। वे आईएसएपीआई फिल्टर हैं। # 6 (हैंडलर मैपिंग्स) एएसपी.NET को विभिन्न क्रियाओं (जीईटी, पोस्ट, इत्यादि) के लिए एक निश्चित मैपिंग (एएसएक्स, अन्य, आदि ..) को लागू करने के लिए और आपके आवेदन में परिभाषित कक्षाओं (हैंडलर) के लिए कब व्याख्या करने की अनुमति देता है या सर्वर। – MacGyver

2

मेरे मामले में मैं ashx एक कोई भी सामग्री प्रकार के रूप में के बजाय सामग्री के रूप में चिह्नित फ़ाइल, यानी गुण था -> बिल्ड कार्रवाई यह सामग्री है, जो मतलब है कि ashx फ़ाइल नहीं थी किया जाना चाहिए था के लिए साइट प्रकाशित करते समय शामिल किया गया।

0

मुझे लगता है कि समस्या यूआरएल में है। ~/ का मतलब आपकी मूल निर्देशिका है।

Use ResolveClientUrl("yourPathHere") or ResolveUrl("yourPathHere"). 

इस त्रुटि के बारे में विवरण प्राप्त करने के लिए छवि के स्रोत की जांच करें और उसे पता बार में कॉपी और पेस्ट करें। विवरण वाला एक पीला पृष्ठ पॉपअप होगा।

मुझे लगता है कि केवल समस्या यूआरएल है।

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