C# - Using Custom Httphandler From A Custom Assembly?
Feb 18, 2011
Is it possible to register a custom httphandler in a stand alone assembly? I'm writing a control toolkit that uses httphandlers to perform AJAX and I would like to make the use of the toolkit as low friction for the web developers as possible. There will be quite a few handlers and I dont want the developer to have to register them all in the web.config.
I'm writing a multi-tenant app that will receive requests like http://www.tenant1.com/content/images/logo.gif and http://www.anothertenant.com/content/images/logo.gif. I want the requests to actually map to the folder location /content/tenant1/images/logo.gif and /content/anothertenant/images/logo.gif
I'm using asp.net Mvc 2 so I'm sure there's probably a way to setup a route to handle this or a custom route handler?
I have an HttpModule and I'd like to choose the HttpHandler for the current request, is that possible? Also web.config is not an option because the condition is not based on path or extension. My googling skills have failed me, no matter what keywords I use all the results are "IHttpHandler vs IHttpModule".
This works when the platform target for ClassLibrary1 is set at x86. However, when I set this to x64 I get the following error when I run web application starts (it compiles just fine): Configuration Error Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately. Parser Error Message: Could not load file or assembly 'ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Does this mean that a HttpHandler can be compiled at x86 only?That doesn't make much sense to me.Does anyone have an idea of what could be going on?Edit 1:The ClassLibrary1 project is just an empty class library project with a single HttpHandler added (which is also empty).Edit 2:I am also getting these warning messages when compiling, I am pretty sure they have something to do with this problem: Assembly generation -- Referenced assembly 'mscorlib.dll' targets a different processor HttpTestEdit 3:I manually edited the project file to force references to the x64 assemblies, like this:
I'm trying to get custom HttpHandler working in my sample web application. I've been experiencing a lot of issues, but finally got stuck with error 500. Application pool is being run in Classic ASP.NET 2.0 mode. Server is IIS 7.5, OS is Win 7 Pro.
I'm using a custom ashx HttpHandler to retrieve gif images from a database and show it on a website - when the image exists, it works great.
However, there are cases when the image will not exist, and I'd like to have the html table holding the image to become invisible so the "image not found" icon is not shown.
I'm trying to secure my web application so XML files it contains can't be downloaded. I thought it would be as simple as adding these to the "httpHandlers" section of web.config:
This failed - the XML files could still be downloaded easily. I tried different browsers in case they were caching, but everything could download the XML files without any trouble. I thought this might be due to some special handling of XML, so I tried mocking up an alternative based on ".txt123" files. I added this file with some dummy content:
We have a handler to deal with .dat files.. everything is already setup and server is acknowledging the file type and doing its thing to handle it..
But the handler requires 1 bit of information along with the HTTP request which is a physical file path.. the file name it knows based on the file we call , but how can i pass a custom header along with the request so that the handler will use that when the request is made?
Basically when on our player.aspx page, i will have a button, when you click that button a request is made to the .dat file, but along with that request i need to send the physical file path.. how can i do that?
My setup project installs web site and executes some custom actions using a class library. That class library is copied to bin folder of the web site, and after that IIS tries to load it even though it isn't needed by the web site any how. How to prevent the class library from loading? Maybe it is possible to copy it to another directory instead of bin? Or maybe the web.config can be configured in such a way to prevent that class library from loading?
I am trying to pass a URL Querystring to a custom assembly. How can I accomplish this. I need to store the querystring value into a parameter, but it has to be decrypted (This is what the custom Assembly does). I have tried to first put it into another parameter and then call that using=Code.MyClass.DecryptMe(Parameters!Eq.Value)But it doesn't get any value from the Eq parameter. how can I accomplish this?What is the best way to get the Querystring into the custom assembly
I'm having some difficulties registering a custom control from a class library in my webapplication's web.config file (or directly on a single page at all). These are the steps I've taken thus far:
1. I have a class library that generates a dll called "Core" and my webapplication has a reference to this "Core" assembly.
2. The Core class library contains a class called AjaxTable which is of namespace "Core.Presentation.DataViews".
3. AjaxTable extends System.Web.UI.Control.
4. I have added the following to my webapplication's web.config file.
I need to access some data from a custom assembly. This custom assembly is used by an RDLC report in visual studio 2010. The report has its own data source but this is for a special condition. When I use ths code below the the text box on the report throws an error showing #ERROR. Its the database call that is causing the error as I have tested without the call. I have changed the connect string in the sample below to ans it shows the syntax.
Can you tell me how it is better to load classes from the same assembly for multiple times? I will explain:
I have a usercontrol that loads the class from assembly A.DLL using (MyAbstractClass)Assembly.Load(path).CreateInstance(type) each time requested page loads. The control can appear on the page many times (about 20-30) and each of them can load the different type from A.DLL...so if control exists on page 20 times, 20 times (MyAbstractClass)Assembly.Load(path).CreateInstance(type) has been executed.
The question is performance...
Does ASP.NET caches DLLs already loaded dynamically? After first (MyAbstractClass)Assembly.Load(path).CreateInstance(type)and first IO, will ASP.NET load A.DLL from cache on other executions ? Or I need to implement some kind of assemblies caching myself?
If I need to implement caching myself, what is the best and fastest way to do it?
I have written an assembly (DLL) containing two classes, MyMembershipProvider and MyRoleProvider, which are derived from MembershipProvider and RoleProvider, respectively. I have implemented most but not all of the abstract methods; the remaining ones all throw a NotImplementedException. I have signed the assembly and added a reference to it in my web-site project, where the relevant web.config sections look like this:
[Code]....
When I fire up the site, however, I get the following error:
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: Exception has been thrown by the target of an invocation.
The error message points to the <add /> tag in the <roleManager /> section: if I take that out, however (enabled="false"), it comes back again as soon as I try to log-in to the site (this time pointing to the membership section). I have verified that is recognising the classes by changing the name in the "type" attribute (to something that doesn't exist), at which point it throws a different error. Therefore I'm presuming there's a problem with my assembly code somewhere; but how can I find out where? I have debug=true in the web.config and also compiled the assembly with Debug options, but no clues.
I am having a very hard time in consuming a very simple web user control that I have built using a Web Application project in VS 2010. The user control works fine as long as the consuming aspx page is in the same project. But after deploying the project using Web Deployment Project into a single assembly I am not able to use it correctly from another aspx page which is in a stand-alone project. The error I see is a null reference exception. Here are the steps that I am following:
1 Create a web user control named WebUserControl_Label using a web application project. This control works fine when used in an webform in the same project.
namespace TestWebAppWithCustomControl { public partial class WebUserControl_Label : System.Web.UI.UserControl { private string _labelText; public string LabelText { set { Label1.Text = value; } get { return Label1.Text; } } protected void Page_Load(object sender, EventArgs e) { } } }
2. Create a single assembly for the user control above using a Web Deployment project. The name of the assemby is TestWebAppWithCustomControl.
3. Create a webform in another web application project to use WebUserControl_Label user control. This project has TestWebAppWithCustomControl.dll added as a referemce.
This is how I am using the custom control above in an aspx page:
The problem is that .NET throws a Null Reference Exception when its trying to set the label text via the LabelText property. It looks like that the label control that lives inside the WebUserControl_Label user control is not getting instantiated and is always null.
I have found a few articles online that talk about creating such distributable user controls using ASP.NET website projects. But if possible I would like to stick with the web application project because of the benefits it brings.
I've researched the System.Security.SecurityException: Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. error.
So far all the suggestions indicate either a custom assembly that needs a permission change (I don't have any custom assemblies) or requires a setting change on the server (I'm not the admin). This is for a ReportViewer app using RDLC files. So my questions are: Are there any other things to try troubleshooting?
I'm a complete newb at attempting to understand (I don't) what I've read on this subject regarding the server admin part. What do I need to tell the server admin to check out and/or change? I've looked at the commonly referenced post on wss_mediumtrust.config (I have no idea what that is). Post link. But with no clue on what the post is talking about I don't know what to ask the admin for.
I am trying to build a custom composite control, which allows me to add custom content to each child control. It's a similar concept to what you have with a GridView and TemplateColumn. The markup used to place the control on the page would end up being something like this:
[Code]....
I have the code below, which allows me to put that markup on the page without throwing any errors, and it renders all the correct HTML, except it doesn't render the contents of the ColumnTemplate. I have replaced the Render() code with a comment because it's quite long winded and doesn't add anything important here:
[Code]....
I have tried to follow examples on MSDN and other forums but I can't make this work. I think I'm missing the code to render the contents of the template, but I don't know how to hook that up.
Every thing is fine but when I execute the project, NO control on my user control gets "instantiated" and thus I receive error "Object Reference Not Set"
Note that My Control has,
1) Public property PublicProperty as String
2) 1 Label control
In Load Event Handler I am setting Text property of Label Control to PublicProperty. Here object reference NOT set error occurs (which means Label control is NOT initialized).I don't want to register my control using Src, TagPrefix etc.
What I'm trying to do is rather basic, but I might have my facts mixed up. I have a details page that has a custom class as it's Model. The custom class uses 2 custom objects with yet another custom object a property of one of the 2. The details page outputs a fair amount of information, but allows the user to post a comment. When the user clicks the post button, the page gets posted to a Details action that looks something like this:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Details(VideoDetailModel vidAndComment) { ....} [Code]....
The only fields on the form that is posted are CommentText and VideoId. Here is what the VideoDetailModel looks like.
public class VideoDetailModel { public VideoDetailModel() { [Code].... I suppose if I added more form fields for the properties I need, they would get posted, but I only need 1 form entry field for the CommentText. If I could get the same Model objects value that were sent to the page to post with the page, it looks like the solution is rather simple. I think using the RenderPartial in the middle of a form is problematic somehow to how the form gets written in html. I can't really put my finger on why things went bonkers, but if I do my RenderPartials before my form and then begin my form with the text entry field and the hidden VideoId, the default ModelBinder works just fine. I was beginning the form, writing the hidden VideoId, rendering several partial views, create my CommentText field, and then closed the form out. The CommentText field would get bound just fine. The hidden VideoId would not. Maybe I missed a rule somewhere about using RenderPartial.
For completeness, the partial view I was rendering took a Comment object and just wrote out it's CommentText data. Several of these objects would exist for a single Video object. All of this data was in a custom type and passed into the View (the main view) as it's Model. This partial view did not have a form and did not have any data entry fields.