Link to home
Start Free TrialLog in
Avatar of foxbari
foxbari

asked on

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
Avatar of 66866
66866
Flag of United States of America image

Assuming your VB.Net and C# code does the same thing, did you try putting a break point and debug?
Avatar of foxbari
foxbari

ASKER

Yes. It won't even debug. The page is rendered immediately.
This is VS 2010 if that makes a difference.
Thanks for your response.
Dumb question- did you compile your code?
Avatar of foxbari

ASKER

Yes. Explicitly.
Build Succesdful each time.
Can you test with a trace?, visit your GridView and then press Ctrl + F5
Avatar of foxbari

ASKER

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?
If you visit explicitly the handler?
Avatar of foxbari

ASKER

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
the URL of the image could be something like this: htpp://www.yourdomain.com/yourhandler.ashx?PID=4
Avatar of foxbari

ASKER

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?
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?
Avatar of foxbari

ASKER

The Webhandler directive doesn't have a trace attribute.
Avatar of foxbari

ASKER

When I call the handler directly from the browser, I just get a blank page.
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
Avatar of foxbari

ASKER

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.
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

Avatar of foxbari

ASKER

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.
ASKER CERTIFIED SOLUTION
Avatar of foxbari
foxbari

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
the interesting thing is that you say that the handler isn't called without that change in the code
Avatar of foxbari

ASKER

Learned about web.config <handler> and <Listener>
Thanks