• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 817
  • Last Modified:

Handler.ashx not being called (VB.NET)

I'm having a problem in asp.NET VB.NET. I have an image displayed from a db in a bound gridview.
My process doesn't call handler.ashx?PID-(PID) in my VB.nET version of this app but it works in my C# version.

I don't get it.

Thanks


Code:

     Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
            'context.Response.ContentType = "text/plain";
            'context.Response.Write("Hello World");
            Me.SetLog()
            ds = New DataSet

            Try
                context.Response.AddHeader("Cache-Control", "private,must-revalidate,post-check=1,pre-check=2,no-cache")
                context.Response.ContentType = "image/jpeg"
                Dim img() As Byte

                If ((Not (context.Request.QueryString("PID")) Is Nothing) _
                            AndAlso (context.Request.QueryString("PID").ToString <> "")) Then
                    Dim pid As Integer = CInt(context.Request.QueryString("PID"))
                    img = _pers.GetSignature(pid)

                    If img.Length <> 0 Then
                        context.Response.BinaryWrite(img)
                    End If

                    'If (Not (ds) Is Nothing) Then
                    '    If (ds.Tables("Signature").Rows(0)("Signature") IsNot System.DBNull.Value) Then
                    '        img = DirectCast(ds.Tables("Signature").Rows(0)("Signature"), Byte())
                    '        context.Response.BinaryWrite(img)
                    '    End If
                    'End If
                End If

            Catch ex As Exception
                log.Error("Missing QueryString: " & ex.Message)
            End Try
        End Sub
0
foxbari
Asked:
foxbari
  • 11
  • 7
  • 2
1 Solution
 
66866Commented:
Assuming your VB.Net and C# code does the same thing, did you try putting a break point and debug?
0
 
foxbariAuthor Commented:
Yes. It won't even debug. The page is rendered immediately.
This is VS 2010 if that makes a difference.
Thanks for your response.
0
 
66866Commented:
Dumb question- did you compile your code?
0
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

 
foxbariAuthor Commented:
Yes. Explicitly.
Build Succesdful each time.
0
 
jorge_torizResearch & Development ManagerCommented:
Can you test with a trace?, visit your GridView and then press Ctrl + F5
0
 
foxbariAuthor Commented:
Nope. Handler.ashx isn't even called. I've even tried RowDataBound but the image needs to have a container and that didn't work either.
Is there a vs property I need to set?
0
 
jorge_torizResearch & Development ManagerCommented:
If you visit explicitly the handler?
0
 
foxbariAuthor Commented:
I tried that, too! It won't stop in the handler. I'm setting the ImageUrl in the Gridview Template field. What is the proper format string for the ImageURL?
Could that be the problem?

I don't receive any errors except if I misform the Image tag the in markup.
Thanks
0
 
jorge_torizResearch & Development ManagerCommented:
the URL of the image could be something like this: htpp://www.yourdomain.com/yourhandler.ashx?PID=4
0
 
foxbariAuthor Commented:
Ok. Here's my markup:

                                <asp:TemplateField HeaderText="Signature">  
                                     <HeaderStyle Font-Bold="True" CssClass="header" Wrap="False" />
                                    <ItemTemplate>
                                       <asp:Image ID="Image1" runat="server"
                                          ImageUrl='<%# "Handler2.ashx?PID=" & Eval("PersonnelID") %>'  Height="30px"
                                            Width="187px" />
                                    </ItemTemplate>
                                    <ItemStyle BorderWidth="6px" />
                                    <FooterTemplate>
                                        &nbsp;<asp:HyperLink ID="lbSignature" runat="server" Font-Names="Arial" Font-Size="10pt"
                                            NavigateUrl='<%# "Signature.aspx?PID=" &  Eval("PersonnelID") %>' Text="Add Signature"></asp:HyperLink>
                                    </FooterTemplate>
                                </asp:TemplateField>

I'm all out of options.
What am I missing?
0
 
jorge_torizResearch & Development ManagerCommented:
I would start to know why the handler.ashx isn't been called, put a trace and call the handler directly from the browser:

Verify if there is a GET registered in the trace.axd
Right click on the result and view the source, what does it show?
0
 
foxbariAuthor Commented:
The Webhandler directive doesn't have a trace attribute.
0
 
foxbariAuthor Commented:
When I call the handler directly from the browser, I just get a blank page.
0
 
jorge_torizResearch & Development ManagerCommented:
My friend, setup the trace in the web.config, is obvious that the handler doesn't have a trace directive.

In the blank page, right click and choose the option "View source", let me know what does it show
0
 
foxbariAuthor Commented:
View Source:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=windows-1252" http-equiv=Content-Type></HEAD>
<BODY></BODY></HTML>

web.config settings:

        <httpHandlers>
              <add verb="*" path="Handler.ashx"       type="ARAdmin.Handler" />
        </httpHandlers>

      <trace enabled="true" requestLimit="40" localOnly="false" pageOutput="true"/>

  </system.web>
      <system.diagnostics>
            <trace>
                  <listeners>
                        <add name="WebPageTraceListener"
                               type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
                  </listeners>
            </trace>
      </system.diagnostics>

They don't do a damn thing.
0
 
jorge_torizResearch & Development ManagerCommented:
Can you try with this web.config content?

<system.web>
    <httpHandlers>
        <add path="Handler.ashx" type="ARAdmin.Handler" verb="*"/>
    </httpHandlers>
</system.web>
<system.webServer>
    <handlers>
        <add name="MyHandler" path="Handler.ashx" type="ARAdmin.Handler" verb="*"/>
    </handlers>
</system.webServer>

Open in new window

0
 
foxbariAuthor Commented:
Interesting...

When I run the handler from the browser with this code including the BinaryWrite:

                Dim pid As Integer = CInt(context.Request.QueryString("PID"))
                context.Response.Write("Did I get here?" & " " & pid)
                ds = _pers.GetPersonnel(pid)

                If ((ds) IsNot System.DBNull.Value) Then
                    If (ds.Tables("Personnel").Rows(0)("Signature") IsNot System.DBNull.Value) Then
                        img = CType(ds.Tables("Personnel").Rows(0)("Signature"), Byte())
                        context.Response.Write(" How about here? Length = " & img.Length)
                        context.Response.BinaryWrite(img)
                    Else
                        context.Response.Write(" Didn't make it ")
                    End If
                End If

...all I get is just a blank image with a 'x'

BUT when I run this code without the BinaryWrite.

I get the output text in the Response.Write statements.
0
 
foxbariAuthor Commented:
I think I got it.

It's the way VB.NET handles System.DBNull vs Nothing vs C# null
VB.NET is for #$%^!

Thanks for your help. Much obliged!
0
 
jorge_torizResearch & Development ManagerCommented:
the interesting thing is that you say that the handler isn't called without that change in the code
0
 
foxbariAuthor Commented:
Learned about web.config <handler> and <Listener>
Thanks
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 11
  • 7
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now