Проблема с обработчиком HTTP в Sharepoint 2010
-
16-10-2019 - |
Вопрос
Я разрабатываю визуальную веб-часть для Sharepoint 2010.Этот веб-раздел должен получать некоторые данные через AJAX.Итак, я выбрал опубликованное решение HTTP handler + jQuery здесь.
Но у меня возникает проблема при попытке получить доступ к обработчику.Я получаю страницу famous.ЧИСТАЯ ошибка:
Ошибка сервера в приложении '/'.Описание ошибки во время выполнения: На сервере произошла ошибка приложения.Текущая пользовательская ошибка настройки для этого приложения запрещают удаленный просмотр сведений о приложении ошибка (по соображениям безопасности). Однако он может быть просмотрен браузерами, работающими на локальном сервере.
Подробные сведения:Чтобы сделать детали этого конкретного сообщения об ошибке доступными для просмотра на удаленных компьютерах, пожалуйста, создайте тег внутри файла конфигурации "web.config", расположенного в корневом каталоге текущего веб-приложения.Затем для атрибута "mode" этого тега должно быть установлено значение "Off".
Примечания:Текущая страница ошибки вы видите, может быть заменена пользовательскую страницу ошибок, изменив атрибут "defaultredirect" из тега конфигурации приложения, чтобы указать на пользовательский URL страницы ошибки.
Поэтому я проверил средство просмотра событий сервера, чтобы увидеть подробную информацию об ошибке.Вот что является его причиной:
Event code: 3006
Event message: A parser error has occurred.
Event time: 8/4/2011 2:08:17 PM
Event time (UTC): 8/4/2011 6:08:17 PM
Event ID: 71c80726be98453ab77a7c1d474cbf7c
Event sequence: 5
Event occurrence: 2
Event detail code: 0
Process information:
Process ID: 6200
Process name: w3wp.exe
Account name: NT AUTHORITY\NETWORK SERVICE
Exception information:
Exception type: HttpParseException
Exception message: Could not create type 'MyNamespace.MyHandler'.
Request information:
Request URL: http://mysharepointurl/_layouts/MyNamespace/MyHandler.ashx
Request path: /_layouts/MyNamespace/MyHandler.ashx
User host address: xxx.xxx.xxx.xxx
User:
Is authenticated: False
Authentication Type:
Thread account name: NT AUTHORITY\NETWORK SERVICE
Thread information:
Thread ID: 11
Thread account name: NT AUTHORITY\NETWORK SERVICE
Is impersonating: True
Stack trace: at System.Web.UI.SimpleWebHandlerParser.GetType(String typeName)
at System.Web.UI.SimpleWebHandlerParser.GetTypeToCache(Assembly builtAssembly)
at System.Web.Compilation.SimpleHandlerBuildProvider.GetGeneratedType(CompilerResults results)
at System.Web.Compilation.BuildProvider.CreateBuildResult(CompilerResults results)
at System.Web.Compilation.BuildProvider.GetBuildResult(CompilerResults results)
at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.UI.SimpleHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.UI.SimpleHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path)
at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Это мой обработчик.ashx
<%@ WebHandler Language="C#" Class="MyNamespace.MyHandler" CodeBehind="MyHandler.cs" %>
Как вы можете видеть, я упускаю из виду Assembly
директива.Но я не знаю, что в это добавить. Где я могу получить ключ, имя и т.д.?
Решение
В итоге я открыл командную строку Visual Studio. Навигация в папку корзины/выпуска моей веб -части и используйте sn -t командовать на моем DLL, чтобы получить токен!
Другие советы
В Visual Studio научитесь любить доступные токены SharePoint. Читайте больше о них, здесь: http://www.andrewconnell.com/blog/archive/2009/12/03/sharepoint-2010-dev-tidbit-use-tokens-in-visual.aspx
Я сделал то же самое сегодня с отдельным файлом .ashx и файлом .cs, и у меня это работает.Я получил ту же ошибку, но затем заметил, что допустил ошибку в имени класса.Вот мой код:
*****DemoHandler.cs********
using System;
using System.Web;
using Microsoft.SharePoint;
namespace CustomHTTPModule
{
public class DemoHandler : IHttpHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
SPSite siteColl = SPContext.Current.Site;
SPWeb site = SPContext.Current.Web;
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World from " +
site.Title +
" at " +
site.Url);
}
}
}
*********DemoHandler.ashx*******************
<%@ Assembly Name="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Assembly Name="CustomHTTPModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9eec5e2ad94ff809" %>
<%@ WebHandler Language="C#" Class="CustomHTTPModule.DemoHandler" CodeBehind="DemoHandler.cs" %>
Я выбрал пустой проект SharePoint в версии VS 2010 Посетите мой блог ниже, чтобы увидеть структуру проекта
Нажмите "Развернуть", это должно развернуть вашу библиотеку DLL CustomHTTPModule в GAC, а файл .ashx - в _Layouts вашего веб-приложения.Если вы просматриваете "http://webappname/sites/siteName/CustomHttpModule/DemoHandler.ashx"должно дать вам текст с названием сайта Я сослался на http://blogs.msdn.com/b/kaevans/archive/2010/08/04/deploying-an-asp-net-httphandler-to-sharepoint-2010.aspx
Быстрый и грязный метод? Отбросьте сборку в GAC и получите свойства. Как только вы получите то, что вам нужно, вы сможете щелкнуть правой кнопкой мыши, удалите его.
Обновление (15 января13):
Вы также можете добавить внешний инструмент в Visual Studio, чтобы помочь с этим (инструменты-> Внешние инструменты ...):
Title: Get Assembly Name
Command: powershell.exe
Arguments: -command "[System.Reflection.AssemblyName]::GetAssemblyName(\"$(TargetPath)\").FullName"
Use Output Window: checked
Когда вы запустите команду, выходное окно покажет что -то вроде этого:
Yourassemblyname, версия = 1,0.0.0, культура = нейтральная, publickeyToken = 9999d8e777777f66
Вы можете сделать то же самое для инструмента сильного имени:
Title: Get Strong Name Token
Command: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\sn.exe
Arguments: -T $(TargetPath)
Use Output Window: checked
С выходным окном, показывающим что -то вроде этого:
Microsoft (R) .NET Framework Srenge Name Utility Версия 3.5.30729.1 Copyright (C) Microsoft Corporation. Все права защищены.
Токен открытого ключа - 9999D8E777777F66