20 June, 2018

Deploying a Web Application using IIS, HTTP Error 401.3 Solved

IIS 7's redesigned management console
IIS 7's redesigned management console (Photo credit: Wikipedia)
Deploying a web application using IIS in Windows was a problem for me after I have completed the task of developing the web app. Publishing it is easy following the File System or FTP method. And there are many articles that you can find on the web telling the same thing.

So why doesn't the web application run right away?

Here's my application structure:
The simple web application I created used bootstrap and CSS, and some jQuery and Javascript functions. It uses some database tables running in MSSQL Express. Now if I remember, I have set up my MSSQL Express to run on mixed authentication mode.

I checked my connectionstring values, and everything seems to be in place. In fact, I am able to perform web application deployment smoothly. Only that I get into an error when I click on a page that accesses the database. Even just querying data and no transactions yet.

I asked a fellow developer, and I was told to add in a logger. That is to help me identify what wrong thing could be happening that isn't normally seen or shown.

But I didn't do that. I am already so close and getting impatient. All static pages working, and only those dependent on the database have issues. I was near to pulling my hair!

But my patience took the better of me. I continued searching, and I found some more articles, randomly, which I tried one by one.

That fixed the issue, and I was able to run the web application if full spectrum.

Here's what I have done, and hopefully, it would help others, too.

1. The usual web application deployment methods, but in my case, File System.
2. In particular, I get HTTP Error 401.3 - Unauthorized: Access is denied due to an ACL set on the requested resource.

Now remember, MSSQL Server was set up using mixed authentication mode, so I have sa account and also Windows account. The latter is the key. Windows account is not authorized, so database access fails.

What's the fix?

Open up IIS Manager (type 'inetmgr' in Cortana/search box).
Open up Sites, then click on the Web Site you are fixing.
In the middle pane, under IIS section, double-click on Authentication.
Right click on Anonymous Authentication, then select Edit.
Instead of Application pool identity, select now Specific user and specify IUSR (or IIS_IUSR).
(In some cases, selecting Application pool identity would do the trick.)
Click on Set and enter the credentials, if needed.
Then OK.

Now go back to the folder where the web site is deployed and give proper priveleges for the IUSR account. For my case, that is what fixed the problem. So I'm logging this discovery via my blog.

Anyway, if this doesn't work, it is 99.99% an issue of the account being used to access the database that is the cause, so just play around these settings. So much so if all static pages already work.

Hope it helps others, too.

Till then!


That should

23 May, 2018

Enable the Design and Split Buttons in Visual Studio

23-May-2018

The ActiveReports designer as it appears in Vi...
The ActiveReports designer as it appears in Visual Studio, with important areas labeled. (Photo credit: Wikipedia)
Enable the design and split buttons in Visual Studio. That was something that I needed to do about a month ago as I was tasked to create a small web application, a submodule of a bigger application. But only source view is enabled and is the default.

So how to enable it?

2 ways:

First Way:
Click on File >  New > File
Choose General on the left pane, then HTML Page at the middle pane.
At the bottom right area of the New File dialog, click on the down-pointing arrow beside Open.
Click on Open With.
Select HTML (Web Forms) Editor, then on the right side, click Set as Default.
Click on OK.

No, that may not show the Design | Split | Source buttons yet. You need to restart Visual Studio first.

Second Way:
Click on Tools > Options > Web Forms Designer
Make sure box on Enable Web Forms designer is ticked.
Start pages in Source View, Design View, Split View, you choose that.
Click on OK.

Again, that may not show the Design | Split | Source buttons yet. You need to restart Visual Studio first.

Hopefully, one of these methods would enable the design and split buttons in your Visual Studio.

Till then!

25 April, 2018

Forcing A Windows Application To Quit On Exit

English: Graphic which hints to Microsoft Windows
English: Graphic which hints to Microsoft Windows (Photo credit: Wikipedia)
25-April-2018

Forcing A Windows Application To Quit On Exit. That was my recent problem with a Windows Forms Application I was finalizing for deployment. It is not a big program. And it is not even one that is complicated. Straightforward and simple. That's what it is. But somehow, it carried a bug.

The .exe isn't terminated by Windows. It remains in the system. I can see it using Task Manager. And how did I find out about it? I am not able to execute a Ctrl-F5 properly. I always get an error.

That is when I started checking here and there, and I found out, the program's .exe remained in the system even after I close the program. Why is that? Beats me!

I opened one of my Windows Forms program, compared the code side-by-side, and no, there is nothing different. It is the same lines of code for the 2 programs, but the former closes and system disposes of everything. The latter, no. the Form closes, but the .exe remains in the system. So I can't start a new program since to the system, it is 'still running'!

Why it behaves that way, I do not know.

Now, I said this is a piece of cake. It is easy. I know how to terminate a program so that it is removed from the Taskbar. I was thinking that the same trick should work on this new program. I mean, why shouldn't it?

But I was wrong. It did not work! How can Visual Studio codes be so quirky?

Anyway, I did some direct codes, testing a few lines a couple of times. And guess what? Here's what worked:

Application.DoEvents();
if (Application.MessageLoop) {
    // WinForms app
    Application.DoEvents();
    Application.Exit();
}
else {
    // Console app
    Environment.Exit(0);
}

That 'if' section, it is meant to be for Windows Forms applications, and the 'else' clause, that is meant to be for non-Windows forms programs, like a Console application. That's the 'normal' way of things. Supposedly the 'right' logic.

But wait.

After trying it the normal way, it didn't work. So I tried it the extra-normal way: use Environment.Exit(0) in my Windows Forms application. And you'll guess it already. It worked!

I guess that is an experienced programmer's edge over the newbie. Not all the time, things work normally. And when it happens, the veteran knows how it is done rightfully, or maverick.

So I hope that you have learned a new thing today: Forcing A Windows Application To Quit On Exit.

Till then!


[Drafted on 26-March-2018]