Frage

Ich entwickle einen visuellen Webpart für SharePoint 2010. Dieses Webpart muss einige Daten über AJAX abrufen. Also habe ich mich für die HTTP -Handlerin + JQuery -Lösung entschieden hier.

Aber ich bekomme ein Problem, wenn ich versuche, auf den Handler zuzugreifen. Ich bekomme die berühmte .NET -Fehlerseite:

Serverfehler in '/' Anwendung. Laufzeitfehler Beschreibung: Auf dem Server ist ein Anwendungsfehler aufgetreten. Die aktuellen benutzerdefinierten Fehlereinstellungen für diese Anwendung verhindern, dass die Details des Anwendungsfehlers (aus Sicherheitsgründen) remote angezeigt werden. Es könnte jedoch von Browsern betrachtet werden, die auf dem lokalen Servergerät ausgeführt werden.

Details: Um die Details dieser spezifischen Fehlermeldung auf Remote -Maschinen zu aktivieren, erstellen Sie bitte ein Tag in einer Konfigurationsdatei "Web.Config" im Stammverzeichnis der aktuellen Webanwendung. Dieses Tag sollte dann sein "Modus" -attribut auf "Aus" einstellen lassen.

Hinweise: Die aktuelle Fehlerseite, die Sie sehen, kann durch eine benutzerdefinierte Fehlerseite ersetzt werden, indem das Attribut "DefaultRedirect" des Konfigurations -Tags der Anwendung geändert wird, um auf eine benutzerdefinierte Fehlerseiten -URL zu verweisen.

Deshalb habe ich den Ereignisbieter des Servers überprüft, um die Details des Fehlers anzuzeigen. Das verursacht es:

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)

Das ist MyHandler.ashx

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

Wie Sie sehen können, fehlt mir das Assembly Richtlinie. Aber ich weiß nicht, was ich hineingeben soll. Woher bekomme ich den Keytoke, den Namen usw.?

War es hilfreich?

Lösung

Ich habe die Visual Studio -Eingabeaufforderung geöffnet. Navigieren Sie in den Ordner "Bin/Release" meines Webparts und verwenden Sie die sn -t Befehl auf meiner DLL, um das Token zu bekommen!

Andere Tipps

Lernen Sie in Visual Studio die verfügbaren SharePoint -Token, die verfügbar sind. Lesen Sie hier mehr darüber: http://www.andrewconnell.com/blog/archive/2009/12/03/sharepoint-2010-tev-tidbit-use-the-tokens-in-visual.aspx

Ich habe heute das Gleiche mit einer separaten .ashx -Datei und einer .cs -Datei gemacht und es funktioniert für mich. Ich bekam den gleichen Fehler, bemerkte dann aber dann, dass ich einen Klassennamenfehler gemacht hatte. Hier ist mein Code:

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

Ich habe ein leeres SharePoint -Projekt in VS 2010 ausgewählt, um meinen Blog unten für ein Bild der Projektstruktur zu besuchen

Klicken Sie auf die Bereitstellung des CustomHttpModule -DLL für GAC und das .ashx für _layouts Ihrer Web -App.http: //webappname/sites/sitename/customhttpmodule/demohandler.ashx"Sollte Ihnen den Text mit dem Site -Namen geben, auf den ich mich bezogen habe http://blogs.msdn.com/b/kaevans/archive/2010/08/04/deploying-an-spasp-net-httphandler-tharepoint-2010.aspx

Schnelle und schmutzige Methode? Lassen Sie die Baugruppe im GAC fallen und erhalten Sie Eigenschaften darauf. Sobald Sie das haben, was Sie brauchen, können Sie mit der rechten Maustaste klicken, um es zu deinstallieren.

Update (15Jan13):

Sie können Visual Studio auch ein externes Werkzeug hinzufügen, um dabei zu helfen (Tools-> Externe Tools ...):

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

Wenn Sie den Befehl ausführen, zeigt das Ausgabefenster so etwas an:

YourasemblyName, Version = 1.0.0.0, Kultur = neutral, PublicKeyToken = 9999d8e77777f66

Sie können dasselbe für das starke Namenswerkzeug tun:

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

Mit dem Ausgangsfenster wie diesem zeigt:

Microsoft (R) .NET Framework Starker Name Utility Version 3.5.30729.1 Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

Öffentliches Schlüssel Token ist 9999d8e777777f66

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top