How do I deploy Blazor WebAssembly Core Hosted Self-Contained App to IIS [duplicate] - iis

This question already has an answer here:
asp.net core web api published in IIS after moved to different IIS server pc gives error 500.19 (0x8007000d)
(1 answer)
Closed 2 years ago.
I have developed a Blazor WebAssembly App that will be used on a Server running Windows 2012 on our Intranet. This is targeting .Net 5.0 Core Hosted and Self-Contained. I need to deploy to IIS 8.5 and have some questions.
When I add the website in IIS, do I point to the root deploy directory with the executable and web.config?
Is there anything else I need to do so that IIS will find the index file in the wwwroot sub-directory?
Is is appropriate to put the deploy directory for this app directly under inetpub?
The publish task created a rather large BlaorDebugProxy directory. This is for release so I don't understand why this was created. Is there a way to prevent this from happening?
I want to access the app using ServerName\AppName. If I create the site with 'AppName' for the host name, will that work or is there something else I need to do?
When I try to browse to the site from IIS, I get a 500.19 'The requested page cannot be accessed because the related configuration data for the page is invalid.' I have not made changes to the file as it was created by the publish process. It is:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\AppName.Server.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: 60862cf1-bea8-48f4-8ae9-270f2f537927-->
Any ideas why this is not working?
PLEASE NOTE that this is using the SELF-CONTAINED model.
Also, I have made sure that the directory has granted full permissions to the App Pool Identity for this App.
The answer below and the supposed duplicate all refer to installing the framework. However, I thought that the whole point of the self-contained model is that it does not rely on an installed framework.
I have searched extensively and see many references that touch on these issues but nothing that says specifically how to get IIS (especially an older version) to host the self-contained model. The Microsoft pages talk about advantages and disadvantages and how to create the files but no details about how to host them or the other questions I listed above.
Has anyone done this successfully who can provide some guidance?
Thanks !

Firstly, please ensure that the Asp.net Core IIS Hosting Bundle installer has been installed on the server.
https://dotnet.microsoft.com/download/dotnet/5.0
Besides, the identity under where your web application runs in IIS should have full access to the root folder of your website. Try to grant the IUSR account full control to that physical path.
Last, please refer to the below link to hosting Core-based web application in IIS.
https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1
Feel free to let me know if the problem still exists.

Related

Is it possible to change web.config values based on the hosting environment, such as iisExpress

I am developing a .net core 3.0 web app with a very simple web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<serverRuntime uploadReadAheadSize="10485760" />
</system.webServer>
</configuration>
However, I want to change the web.config file so that this configuration is active with iis, but not with iisExpress, where the permissions to change uploadReadAheadSize are locked.
Surely there must be a simple way to do this, but all my googling hasn't given me a straightforward answer
Due to the design, there seems to be no way to tell from within web.config whether the hosting server is IIS or IIS Express.
But because IIS and IIS Express use different configuration file path, you can move such configuration elements from your web.config file to the desired applicationHost.config file.

Custom Functions not working for IIS hosted Office Excel add-in

We deployed Batching Custom functions project into IIS as hosted application. Task-pane is working fine with API. But when trying to invoke as custom functions facing issue
Error in loading custom functions
at the bottom of add-in. We developed using webpack.config.js but little confused when deploying on IIS for exact server running. So do we need to use express js to run separate port or directly shall we run only enough webpack.config.js file? Kindly confirm on this deployment process.
Also Taskpane related API's are able to fetch successfully but only facing issue with custom functions related API.
You may can check if custom function related files can be seen in your website hosted by IIS. You can have the url information in manifest file.
Would you please check whether you could access the JSON file by browsing to http:///custom-function.json? Would you please also check whether the mime type is correct? If the mime type is not correct, you may need to update the web.config, such as
<configuration>
<system.webServer>
<staticContent>
<remove fileExtension=".json"/>
<mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
</system.webServer>
</configuration>
By the way, to make it work for Excel online, you also need to enable CORS access to the custom-function.json

Deployed Web Core API: Response status code does not indicate success: 404 (Not Found).

I have deployed a new application that contains a Web Project which communicates with a Web Core API.
I have used this link as a reference to set it up;
https://learn.microsoft.com/en-us/aspnet/core/publishing/iis
IIS has been set up for a while on this test server, so some the steps did not need to be repeated.
In IIS if I browse the Web API is launches as follows.
But if I do likewise for the web project that uses it, I am getting this error:
Response status code does not indicate success: 404 (Not Found) for a simple get call to the Web API.
What should I be considering to fix this?
Multiple possibilities I see
You just browsed to the root url and you do not have any default page setup in IIS . To see the Web API,browse to the webapi url you have specified in your route.config file.
Default route will be like this based on your routing.Could you browse to
http://testweb.sherrygreengrp.com/api/<controller>
You do not have the Windows Server Hosting Bundle
Install the .NET Core Windows Server Hosting bundle on the hosting
system. The bundle will install the .NET Core Runtime, .NET Core
Library, and the ASP.NET Core Module. The module creates the
reverse-proxy between IIS and the Kestrel server. Note: If the system
doesn't have an Internet connection, obtain and install the Microsoft
Visual C++ 2015 Redistributable before installing the .NET Core
Windows Server Hosting bundle
ASP.NET CORE Module correctly configured .Do you have this setting in your web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%"
arguments="%LAUNCHER_ARGS%"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
I found that the URI I needed on the deployment server needed to have the name of my application, whilst in development this was not needed. Once I made that correction it worked fine.

Problems Deploying web application to iis

Built a web application with webmatrix, try to deploy locally to iis 5.1 for testing purposes so i added it to my wwwroot folder didnt work then i created a virtual directory. the home page works with this but my login created with web helper doesnt work...when i click login all i see is the browser sending login? and nothing happens....and my web deploy that i installed doesnt work either so i can deploy the site with dependencies to iis... also can it be deployed to windows server2003....any hints would be appreciated...
.
I am using Webmatrix3 and my web server is Windows Server 2008 R2 with IIS7. I just copy and paste my entire project directory from my local machine up to the IIS inetpub/wwroot directory. Then from within IIS7 I right click that directory (which is now in the tree under sites) and select "Convert to Application". Works every time.
I also had to add this to my Web.config to make it work in I.E. because of the forced compatibility mode issue:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
I hope this helps!

iis 7 + http custom handler error: could not load file or assembly The system cannot find the file specified

Windows vista 32 bit - C# - .NET 4 - sqlite - IIS 7
I'm building a small project that contains is a custom HTTP handler where an user can request a XML file and the project will generate the file and send it to the user. It should be flexible enough to send something else too like e.g. json.
Everything was going well until I had to deploy the handler. I've created a library (dll) file which contains the logic for serving of the requested information. I've open IIS manager and I've created a virtual directory to the debug bin file (later on i made it an application. it did not make a difference).
I've followed countless examples and tutorials like these ones:
I started with this one: http://support.microsoft.com/kb/308001
http://msdn.microsoft.com/en-us/library/bb515343.aspx
msdn.microsoft.com/en-us/library/46c5ddfy.aspx
But with no luck. As you could have read I'm not using any asp.net website even though I do have a web.config that I've added to the bin folder and it looks like this:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Detailed" />
<asp scriptErrorSentToBrowser="true" />
<directoryBrowse enabled="false" />
<handlers accessPolicy="Read, Script, Execute">
<add name="LigoManagedHandler" path="*" verb="*" type="Ligo.Service, Ligo" resourceType="Unspecified" preCondition="integratedMode" />
</handlers>
</system.webServer>
</configuration>
When I try to run handler in the browser get the following error:
Could not load file or assembly 'Ligo' or one of its dependencies. The system cannot find the file specified.
Exception Details: System.IO.FileNotFoundException: Could not load file or assembly 'Ligo' or one of its dependencies. The system cannot find the file specified.
I have tried so many possible combination in IIS manager to get it working ('httphandlers', 'classic mode' and so on ...) but i'm truly stuck. The information I've found on the internet is not helping much.
What am I doing wrong or missing to make it work?
Something in this rant triggered an idea, an I stumbled on the answer.
The line in all those tutorials that say put type="ClassName, AssemblyName" into the Handlers section in Web.Config are plain WRONG.
All I did was change this to type="AssemblyName.ClassName" and everything started working, in both a Web Site Project and a Web Application Project that I had created.
I'm running IIS 7.5 in integrated mode so YMMV.
Craig
I figure it out. I had to make a asp.net website project and add my dll as reference to this project.
I read this thread that provided this information which is not clear on the internet.
http://forums.asp.net/t/1088861.aspx/1?What+causes+the+quot+Could+not+load+type+quot+problem+
It should state that it is not possible to make the httphandler without a aspnet website project. or am i mistaken? the example on the internet are incorrect! or provide too little information.
I know, this is an old thread. However, I've been looking for an answer for a few days without finding a clear one. So, in case anyone comes across similar scenario.
You can create custom Http Handler as a stand-alone Class Library project and use it in IIS.
On IIS Add new Application with ASP4 Integrated mode. Place your compiled DLL into bin folder (this is what i was missing all along). Seems obvious that it should be there; took some time to figure this out. :)
web.config:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<handlers>
<add verb="*" path="*.ogg" name="test" type="Namespace.Classname"/>
</handlers>
</system.webServer>
</configuration>
Hope this helps.
Cheers.

Resources