SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Provider Hosted App Standard-MVC/WebForms-Template funktioniert nicht "CannotRedirect"

Unbeantwortet Dieser Beitrag hat 4 Antworten

Ohne Rang
7 Beiträge
Hannibal5000 erstellt 24 Juni 2014 10:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Liebe Community, 

 

ich komme leider nicht weiter. Ich arbeite mich derzeit in Das Thema "On Premise Sharepoint Apps" ein. Hierzu habe ich ein SP 2013, ein AD/DNS, SQL auf einem Entwicklungsserver mit Win 2008 R2 aufgesetzt. 

Nun wollte ich einmal in die App-Entwicklung starten und stehe direkt vor Problemen. Wenn ich über Visual Studio 2013 ein MVC oder auch ein WebForms Provider hosted Projekt anlege (Nutzung des SP-Servers, keine weiteren Einstellungen; direkte Nutzung des IIS-Express und der damit verbundenen Konfiguration), dann erhalte ich immer beim Start die Fehlerseite (nach vorherigem Einloggen) . Nach einigem Debuggen ist nun klar, dass der Fehler auftritt, da ein "CannotRedirect" auftritt.

Woran kann dieser Fehler liegen? Ich habe lediglich die Testtemplates gestartet, welche out of the box funktionieren sollten (diverse Tuts im Inet zeigen das auch...). Ist es ein Berechtigungsproblem in SP oder eine Konfigurationssache?
Ich bin leider heillos überforrdert und freue mich über jeden Hinweis, der zur Klärung beiträgt! Gerne poste ich auch Errorlogs oder ähnliches. Der fehlt schein mir nur so grundlegend zu sein, dass ich einfach nicht weiß, was ich posten sollte. 

 

Vielen Dank und VG,

Hannibal5000

 

 

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Juni 2014 10:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Funktionieren denn Apps generell auf dem System? Hast Du es mal mit irgendeiner Beispielapp aus dem Office Store versucht?

Die CannotRedirectException deutet nämlich eher auf ein generelles Konfigurationsproblem hin, da offenbar der Redirect von SharePoint zum App Web nicht funktioniert.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Hannibal5000 Als Antwort am 24 Juni 2014 11:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für das schnelle Feedback :) 

Mit den Apps scheint es schwierig zu sein, da es sich oftmals um Apps handelt, die ein englisches Sprachpaket nutzen. Generell scheint es aber zu gehen. Ich hatte glaub ich den IIS falsh eingestellt. Nach einer Modification zeigt er mir nun die MVC-Site an, aber nur wenn ich die Identifierung des Nutzers auskommentiere. ?!

Im Standardtemplate im Homecontroller.cs wird der Nutzerabgerufen:

                //if (clientContext != null)

                //{

                //    spUser = clientContext.Web.CurrentUser;

 

                //    clientContext.Load(spUser, user => user.Title);

 

                //    clientContext.ExecuteQuery();

 

                //    ViewBag.UserName = spUser.Title;

                //}

Bei executeQuery schmeißt er mir immer eine 401-Exception (Nicht autorisiert). Kommentiere ich diese Zeilen aus, so funktioniert das gesamte MVC-Template. Nun bin ich noch verwirrter als vorher. Woran kann es liegen, dass er den Nutzer nicht richtig authentifizieren kann. Oder fehlen dem Nutzer Rechte? Aber welche? Das Problem tritt sowohl beim SP-Systemkonto, als auch beim generellen AD-User-Account auf. 

Es handelt sich immer um AD-Nutzer und ich entwickle direkt auf dem SP-Server, auf wlechen auch AD und DNS läuft.

 

 

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Juni 2014 12:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dann bist Du ja immerhin ein Stück weiter :-)

Jetzt wird es aber komplizierter: die Authentifizierung ist bei Provider-Hosted Apps nicht ganz einfach einzurichten. Dein Problem ist nicht die Identifizierung eines Benutzers, sondern der generelle Zugriff der App auf SharePoint. Lies mal alles durch, was Du im Web zur Authentifizierung bei Provider-Hosted Apps findest. Anfangen kannst Du z.B. hier: http://msdn.microsoft.com/de-de/library/office/fp142384(v=office.15).aspx

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Hannibal5000 Als Antwort am 24 Juni 2014 16:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi,

 

ich kreise das Problem weiter ein, bin jedoch noch nicht zu einer funktionsfähigen Lösung gekommen!

Ist-Situation: 

  • SP ist für die Verwendung von Apps vorbereitet (Appkatalog, AppWeb, etc.) => Apps können hinzugefügt werden
  • Provider-Hosted-MVC-Deployment des Standard-Templates funktioniert bis auf den Part, wo versucht wird den "ClientContext" über die TokenHelper.cs zu holen
  • URL/Nutzernamen werden korrekt übergeben (Können im Debug-Modus eingesehen werden; SPContext ist funktionsfähgi)

Das Problem ist somit alleinig der ClientContext, welcher immer eine Exception schmeißt sobald der ClientContext mittels "new" eingericht wird:
(Ich habe keine Änderungen vorgenommen und verwende das Basistemplate samt TokenHelper.cs + Es wird eine targetURL und ein accessToken übergeben.  

Die Exception lautet: "base {"Die Eigenschaft oder das Feld 'ServerLibraryVersion' wurde nicht initialisiert. Sie/es wurde nicht angefordert, oder die Anforderung wurde nicht ausgeführt. Möglicherweise muss sie/es explizit angefordert werden."} System.InvalidOperationException {Microsoft.SharePoint.Client.PropertyOrFieldNotInitializedException}"

--- Hier die Methode, welche das zur Exception führt-------------

        /// <summary>

        /// Verwendet das angegebene Zugriffstoken, um einen Clientkontext zu erstellen.

        /// </summary>

        /// <param name="targetUrl">URL der Ziel-SharePoint-Website</param>

        /// <param name="accessToken">Zu verwendendes Zugriffstoken beim Aufrufen der angegebenen targetUrl</param>

        /// <returns>Ein ClientContext, der zum Aufrufen von targetUrl mit dem angegebenen Zugriffstoken bereit ist.</returns>

        public static ClientContext GetClientContextWithAccessToken(string targetUrl, string accessToken)

        {

            ClientContext clientContext = new ClientContext(targetUrl);

 

            clientContext.AuthenticationMode = ClientAuthenticationMode.Anonymous;

            clientContext.FormDigestHandlingEnabled = false;

            clientContext.ExecutingWebRequest +=

                delegate(object oSender, WebRequestEventArgs webRequestEventArgs)

                {

                    webRequestEventArgs.WebRequestExecutor.RequestHeaders["Authorization"] =

                        "Bearer " + accessToken;

                };

 

            return clientContext;

        }

----

Ich bin für jeden Ratschlag mehr als dankbar! :)