Pregunta

Estoy desarrollando un elemento web visual para Sharepoint 2010.Este elemento web necesita obtener algunos datos a través de AJAX.Así que opté por el controlador HTTP + solución jQuery publicada aquí.

Pero tengo un problema al intentar acceder al controlador.Recibo la famosa página de error .NET:

Error de servidor en la aplicación '/'.Descripción del error de tiempo de ejecución:Se produjo un error de aplicación en el servidor.La configuración de error personalizada actual para esta aplicación evita que los detalles del error de la aplicación se vea de forma remota (por razones de seguridad).Sin embargo, podría ser visto por los navegadores que se ejecutan en la máquina del servidor local.

Detalles:Para habilitar los detalles de este mensaje de error específico que se pueden ver en máquinas remotas, cree una etiqueta dentro de un archivo de configuración "web.config" ubicado en el directorio raíz de la aplicación web actual.Esta etiqueta debe tener su atributo "Modo" configurado en "OFF".

Notas:La página de error actual que está viendo se puede reemplazar mediante una página de error personalizado modificando el atributo "DeFaulTredIrect" de la etiqueta de configuración de la aplicación para apuntar a una URL de la página de error personalizada.

Entonces revisé el visor de eventos del servidor para ver los detalles del error.Esto es lo que lo está causando:

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)

Este es MyHandler.ashx

<%@ WebHandler Language="C#" Class="MyNamespace.MyHandler" CodeBehind="MyHandler.cs" %>

Como puedes ver me falta el Assembly directiva.Pero no sé qué ponerle. ¿Dónde consigo el KeyToke, Nombre, etc?

¿Fue útil?

Solución

He terminado abriendo el símbolo del sistema Visual Studio. Navegar a la carpeta bin/lanzamiento de mi parte web y usar el SN -T ¡Comandar en mi DLL para obtener el token!

Otros consejos

En Visual Studio, aprenda a amar los tokens de SharePoint que están disponibles. Lee más sobre ellos aquí: http://www.andrewconnell.com/blog/archive/2009/12/03/sharepoint-2010-dev-tidbit-use-the-tokens-in-visual.aspx

Hice lo mismo hoy con un archivo .ashx y un archivo .cs separados y funciona para mí.Recibí el mismo error pero luego noté que había cometido un error en el nombre de la clase.Aquí está mi código:

*****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" %>

Elegí un proyecto de SharePoint vacío en VS 2010 Visite mi blog a continuación para obtener una imagen de la estructura del proyecto

Haga clic en implementar, debería implementar su dll CustomHTTPModule en GAC y el .ashx en _Layouts de su aplicación web. Si busca "http://webappname/sites/siteName/CustomHttpModule/DemoHandler.ashx"Debería darle el texto con el nombre del sitio al que me referí http://blogs.msdn.com/b/kaevans/archive/2010/08/04/deploying-an-asp-net-httphandler-to-sharepoint-2010.aspx

¿Método rápido y sucio? Deje caer el ensamblaje en el GAC y obtenga propiedades. Una vez que tenga lo que necesita, puede hacer clic derecho en desinstalarlo.

Actualización (15JAN13):

También puede agregar una herramienta externa a Visual Studio para ayudar con esta (herramientas de herramientas-> Herramientas externas ...):

Title: Get Assembly Name
Command: powershell.exe
Arguments: -command  "[System.Reflection.AssemblyName]::GetAssemblyName(\"$(TargetPath)\").FullName"
Use Output Window: checked

Cuando ejecute el comando, la ventana de salida mostrará algo como esto:

YourAssemblyName, versión = 1.0.0.0, cultura = neutral, publickeyToken = 9999d8e7777777f66

Puede hacer el mismo tipo de cosas para la herramienta de nombre fuerte:

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

Con la ventana de salida que muestra algo como esto:

Microsoft (R) .NET Framework Strong Name Utity Versión 3.5.30729.1 Copyright (c) Microsoft Corporation. Reservados todos los derechos.

El token de clave pública es 9999D8E777777F66

Licenciado bajo: CC-BY-SA con atribución
scroll top