2013-06-06 4 views
0

Я хочу MyHandler, установленный в GAC для применения ко всем приложениям, размещенным в IIS.Как добавить HttpHandler в GAC к IIS7.5

Я сделал работу для конкретного применения при добавлении Managed Handler на глобальном уровне

<add name="MyHandler" path="*.txt" verb="*" type="MyHandlerAssembly.MyHandler" resourceType="Unspecified" preCondition="integratedMode" /> 

и .dll в/bin директории конкретного apllication. На этом этапе все работает так, как ожидалось, исключая, что я не собираюсь добавлять этот .dll к каждому объявлению.

Поэтому я добавил MyHandlerAssembly в GAC, а затем я изменил типа согласно gacutil -l MyHandler:

<add name="MyHandler" path="*.txt" verb="*" type="MyHandlerAssembly.MyHandler, MyHandlerAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8a3126c79b7aa959" resourceType="Unspecified" preCondition="integratedMode" /> 

И ошибки приема:

System.IO.FileLoadException: The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047) 

С StackTrace:

[FileLoadException: The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)] 
    System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, Boolean loadTypeFromPartialName, ObjectHandleOnStack type) +0 
    System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName) +314 
    System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +95 
    System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +124 
    System.Web.Configuration.HandlerFactoryCache.GetTypeWithAssert(String type) +47 
    System.Web.Configuration.HandlerFactoryCache.GetHandlerType(String type) +18 
    System.Web.Configuration.HandlerFactoryCache..ctor(String type) +27 
    System.Web.HttpApplication.GetFactory(String type) +95 
    System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +352 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375 

Что я делаю неправильно? Благодарю.

UPDATE 1.

также пытался добавить мою сборку C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config, но получил сообщение об ошибке:

Could not load file or assembly 'MyHandlerAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8a3126c79b7aa959' or one of its dependencies. The system cannot find the file specified. 

ответ

1

После добавления сборки в GAC для применения изменений необходимо перезапустить IIS. Таким образом, полное решение:

  1. Добавить узел с модулем в GAC, выполнив gacutil.exe -i path_to_project\bin\MyHandlerAssembly.dll
  2. Restart IIS
  3. Добавить Handler Mapping типа MyHandlerAssembly.MyHandler, MyHandlerAssembly, Version=X.X.X.X, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXX (новые типов из вашей сборки будет доступна после перезапуска IIS)

 Смежные вопросы

  • Нет связанных вопросов^_^