Ich baue meine erste Facebook-App, und ich habe ein Problem, ich bin zu neu für diese ganze Sache, um zu verstehen, was los ist, und hoffte, dass jemand, der mehr Erfahrung hat, verstehen könnte. Hier ist ein Link zu der App, und der Fehler:Facebook-App erhält einen HTTP 500.23-Fehler; Übersetzung?
http://apps.facebook.com/nowiknow/
Fehler:
HTTP Error 500.23 - Internal Server Error An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.
Ich bin Hosting meine app auf DiscountASP.Net (littleappbin.com/whoremovedme/). Mein Anwendungspool Pipeline-Modus ist auf Integriert konfiguriert, und der Server verwendet IIS7. Soweit ich das beurteilen kann, fragt mein Code erfolgreich nach den erforderlichen Berechtigungen, aber bei der Weiterleitung an die App läuft etwas schief.
Hier ist meine web.config Datei:
<configuration>
<configSections>
<section type="Facebook.FacebookConfigurationSection, Facebook" name="facebookSettings" allowLocation="true" allowDefinition="Everywhere" />
<section name="canvasSettings" type="Facebook.Web.CanvasConfigurationSettings, Facebook.Web" />
</configSections>
<facebookSettings appSecret="xxxxxxxxxx" appId="xxxxxxxxxxxxxx" cookieSupport="true"/>
<canvasSettings canvasPageUrl="http://apps.facebook.com/nowiknow" canvasUrl="http://www.littleappbin.com/whoremovedme" authorizeCancelUrl="http://facebook.com"/>
<system.web>
<compilation debug="true" targetFramework="4.0" urlLinePragmas="true">
<assemblies>
<add assembly="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.DirectoryServices.Protocols, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.RegularExpressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Entity.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Services.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies>
<buildProviders>
<add extension=".edmx" type="System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider"/>
</buildProviders>
</compilation>
<httpHandlers>
<add verb="*" path="facebookredirect.axd" type="Facebook.Web.FacebookAppRedirectHttpHandler, Facebook.Web" />
</httpHandlers>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<add name="facebookredirect.axd" verb="*" path="facebookredirect.axd" type="Facebook.Web.FacebookAppRedirectHttpHandler, Facebook.Web" />
</handlers>
</system.webServer>
<connectionStrings>
<add name="xxxxxConnectionString" connectionString="Data Source=xxxxx;Initial Catalog=xxxxx;Persist Security Info=True;User ID=xxxxx;Password=xxxxxx" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
Hier ist der C# auf dem Back-End meiner Seite lautet:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Facebook;
using Facebook.Web;
using System.Collections;
public partial class _Default : Page
{
protected string requiredAppPermissions = "offline_access,user_about_me";
protected FacebookApp fbApp;
protected CanvasAuthorizer authorizer;
protected void Page_Load(object sender, EventArgs e)
{
fbApp = new FacebookApp();
authorizer = new CanvasAuthorizer(fbApp);
authorizer.Perms = requiredAppPermissions;
if (authorizer.Authorize())
{
//Authorized!
dynamic myInfo = fbApp.Get("me");
lblName.Text = "<b>" + myInfo.name + "</b>!";
UpdatePanel1.Visible = false;
}
}
private void ShowFacebookContent()
{
if (!Page.IsPostBack)
{
dynamic myInfo = fbApp.Get("me");
JsonArray myFriends = (JsonArray)((JsonObject)fbApp.Get("me/friends"))["data"];
lblFriendCount.Text = "<b>" + myFriends.Count.ToString() + "</b>";
//Record any new facebook friends
AddFacebookFriends(myInfo.id, myFriends);
//Populate the Previous friends DDL
PopulatePreviousFriendsDDL(myInfo.id);
//Populate the New Friends DDL
PopulateNewFriendsDDL(myFriends);
//Display the Missing Friends list
CalculateMissingFriends();
}
}
private void CalculateMissingFriends()
{
bool matched;
foreach (ListItem oldFriend in ddlPreviousFriends.Items)
{
matched = false;
foreach (ListItem newFriend in ddlNewFriends.Items)
{
if (oldFriend.Value == newFriend.Value)
{
matched = true;
break;
}
}
if (!matched)
{
//This friend has either been deleted, or has deleted the user
dynamic friendData = fbApp.Get(oldFriend.Value);
lblMissingFriends.Text += "<a href='" + friendData["link"].ToString() + "' target='_blank'>" + oldFriend.Text + "</a><br/>";
}
}
if (String.IsNullOrEmpty(lblMissingFriends.Text))
{
lblMissingFriends.Text = "No Friends are missing!";
}
}
private void PopulateNewFriendsDDL(JsonArray friends)
{
foreach (JsonObject friend in friends)
{
ddlNewFriends.Items.Add(new ListItem(friend["name"].ToString(), friend["id"].ToString()));
}
}
private void PopulatePreviousFriendsDDL(string userID)
{
FriendsDataContext friendDb = new FriendsDataContext();
var query = from dbFriends in friendDb.Friends
where dbFriends.UserID == userID
select dbFriends.FriendID;
ListItem friendItem;
foreach (string friendID in query)
{
dynamic friend = fbApp.Get(friendID);
ddlPreviousFriends.Items.Add(new ListItem(friend["name"].ToString(), friendID));
}
}
private void AddFacebookFriends(string userID, JsonArray friends)
{
FriendsDataContext friendDb = new FriendsDataContext();
var query = from dbFriends in friendDb.Friends
where dbFriends.UserID == userID
select dbFriends.FriendID;
bool matched;
string lastFriendID = String.Empty;
foreach (JsonObject friend in friends)
{
matched = false;
lastFriendID = friend["id"].ToString();
foreach(string friendID in query)
{
if (lastFriendID == friendID)
{
matched = true;
break;
}
}
if (!matched)
{
//Add this friend
friendDb.Friends.InsertOnSubmit(new Friend { ID = System.Guid.NewGuid().ToString(), UserID = userID, FriendID = lastFriendID });
}
}
friendDb.SubmitChanges();
}
protected void btnRecordFriends_Click(object sender, EventArgs e)
{
btnRecordFriends.Visible = false;
ShowFacebookContent();
UpdatePanel1.Visible = true;
}
}
ich für den unordentlichen Code entschuldigen, eine gute Die meisten davon stammen von verschiedenen Samples, mit denen ich herumhacke.
Das war es! Durch Anpassen der Datei web.config und Ändern des Zielframeworks wurde das Problem behoben. Sie hatten Recht, viele der Assemblys verwendeten verschiedene .net-Versionen. Durch Entfernen und Neukompilieren nach dem Ändern des Framework-Ziels auf 4.0 fügten Visual Studios automatisch die korrekten Assemblyverweise zur Datei web.config hinzu. –