Domanda

sto sviluppando una web part visiva per Sharepoint 2010. Questo webpart ha bisogno di ottenere alcuni dati tramite la tecnologia AJAX. Così sono andato per la soluzione HTTP handler + jQuery postato qui .

Ma sto diventando un problema quando si cerca di accedere al gestore. Ho la famosa pagina di errore NET:

Errore del server in '/' applicazione. Errore di runtime Descrizione: errore di applicazione si è verificato sul server. L'errore personalizzato corrente impostazioni per questa applicazione impediscono i dettagli dell'applicazione errore dalla visualizzazione a distanza (per motivi di sicurezza). Potrebbe, tuttavia, essere visualizzato dai browser in esecuzione sulla macchina server locale.

Dettagli: Per abilitare i dettagli di questo messaggio di errore specifico di essere visualizzabile su macchine remote, si prega di creare un tag all'interno di un file di configurazione "web.config" che si trova nella directory principale del applicazioni Web corrente. Questo tag deve poi avere il suo Attributo "mode" impostato su "Off".

Note: La pagina di errore corrente che state vedendo può essere sostituito da una pagina di errore personalizzata modificando l'attributo "defaultRedirect" del tag di configurazione dell'applicazione per puntare a un costume pagina di errore URL.

Così ho controllato Visualizzatore eventi del server per vedere i dettagli dell'errore. Questo è ciò che sta 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)

Questa è MyHandler.ashx

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

Come si può vedere che mi manca la direttiva Assembly. Ma io non so cosa mettere in esso. Dove posso trovare il KeyToke, nome, ecc?

È stato utile?

Soluzione

Ho finito per openning Visual Studio Prompt dei comandi. Navigare alla cartella bin / uscita del mio web part e utilizzare il sn -T il comando sul mio DLL per ottenere il token!

Altri suggerimenti

In Visual Studio, imparare ad amare i token di SharePoint che sono disponibili. Per saperne di più su di loro qui: http://www.andrewconnell.com/blog/archive/2009/12/03/sharepoint-2010-dev-tidbit-use-the-tokens-in-visual.aspx

Ho fatto la stessa cosa oggi con un file Ashx separato e un file con estensione cs e funziona per me. Ho ottenuto lo stesso errore, ma poi notato che avevo fatto un nome di classe errore. Ecco il mio codice:

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

Ho scelto un progetto di SharePoint vuoto in VS 2010 Visita il mio blog sotto per un'immagine della struttura del progetto

Fare clic su Distribuisci dovrebbe distribuire il dll CustomHTTPModule al GAC e l'Ashx alle _Layouts del Web app.If si naviga per " http: //webappname/sites/siteName/CustomHttpModule/DemoHandler.ashx " dovrebbe darvi il testo con il nome del sito Ho fatto riferimento a http://blogs.msdn.com/b/kaevans/archive/2010/08 /04/deploying-an-asp-net-httphandler-to-sharepoint-2010.aspx

veloce e sporco metodo? Eliminare l'assembly nella GAC ??e ottenere le proprietà su di essa. Una volta che hai quello che ti serve, è possibile fare clic destro disinstallarlo.

Update (15JAN13):

È inoltre possibile aggiungere uno strumento esterno per Visual Studio per aiutare con questo (Strumenti-> Strumenti esterni ...):

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

Quando il vostro eseguire il comando, la finestra di output mostrerà qualcosa di simile:

YourAssemblyName, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 9999d8e777777f66

Si può fare lo stesso tipo di cosa per lo strumento nome sicuro:

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 finestra di output che mostra qualcosa di simile:

Microsoft (R) .NET Framework nome sicuro Utility Versione 3.5.30729.1 Copyright (c) Microsoft Corporation. Tutti i diritti riservati.

chiave pubblica token è 9999d8e777777f66

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top