Вопрос

Я разрабатываю визуальную веб-часть для 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top