Windows vista 32 bit - C# - .NET 4 - sqlite - IIS 7
我正在构建一个小项目,其中包含一个自定义 HTTP 处理程序,用户可以在其中请求 XML 文件,项目将生成该文件并将其发送给用户。它应该足够灵活,可以发送其他东西,例如 json。
一切都很顺利,直到我不得不部署处理程序。我创建了一个库 (dll( 文件,其中包含用于提供所请求信息的逻辑。我已经打开了IIS管理器,并为调试bin文件创建了一个虚拟目录(后来我把它变成了一个应用程序,它没有区别(。
我遵循了无数示例和教程,例如:
我从这个开始:http://support.microsoft.com/kb/308001
http://msdn.microsoft.com/en-us/library/bb515343.aspx
msdn.microsoft.com/en-us/library/46c5ddfy.aspx
但没有运气。正如您可能已经读到的那样,我没有使用任何 asp.net 网站,即使我确实有一个添加到 bin 文件夹中的 web.config,它看起来像这样:
<?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>
当我尝试在浏览器中运行处理程序时,出现以下错误:
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.
我已经在IIS管理器中尝试了许多可能的组合来使其工作("httphandler","经典模式"等......(,但我真的卡住了。我在互联网上找到的信息并没有多大帮助。
我做错了什么或错过了什么才能让它工作?
这个咆哮中的某些东西引发了一个想法,我偶然发现了答案。
所有那些教程中说type="ClassName, AssemblyName"
放入 Web.Config 中的处理程序部分的行都是完全错误的。
我所做的只是将其更改为type="AssemblyName.ClassName"
,然后一切开始工作,无论是在我创建的网站项目还是我创建的 Web 应用程序项目中。
我在集成模式下运行 IIS 7.5,所以 YMMV。
克雷格
我想通了。我必须创建一个 asp.net 网站项目,并将我的dll添加为该项目的参考。
我阅读了这个线程,它提供了在互联网上不清楚的信息。
http://forums.asp.net/t/1088861.aspx/1?What+causes+the+quot+Could+not+load+type+quot+problem+
它应该声明,如果没有aspnet网站项目,就不可能制作httphandler。 还是我弄错了? 互联网上的例子不正确! 或提供的信息太少。
,这是一个古老的线程。然而,几天来我一直在寻找答案,但没有找到一个明确的答案。因此,如果有人遇到类似的情况。
可以将自定义 Http 处理程序创建为独立的类库项目,并在 IIS 中使用它。
在 IIS 上,使用 ASP4 集成模式添加新应用程序。将编译的DLL放入bin文件夹中(这就是我一直缺少的(。似乎很明显它应该在那里;花了一些时间来弄清楚这一点。:)
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>
希望这有帮助。干杯。