2011-09-16 5 views
0

Nous avons déployé un fichier crossdomain.xml à la racine de l'instance Sharepoint 2010 afin de définir la politique de domaine croisé flash. Dans SP2007 cela a fonctionné comme prévu, mais il SP2010 le fichier nom est bloqué.Fichier SharePoint 2010 CrossDomain.xml

Si nous renommons le fichier autre que crossdomain.xml il est servi. Dès que nous l'appelons ce que nous voulons, il y a une erreur 404.

Des idées pour contourner ce problème? Je suppose qu'il doit maintenant être un moyen de contrôler ce fichier via SharePoint lui-même?

Je cherche une réponse autre que de copier le fichier crossdomain.xml dans la racine d'IIS.

+0

Pouvez-vous répondre à votre question de manière à aider les autres? Si vous le faites, vous pouvez sélectionner le vôtre comme réponse correcte. Cela peut sembler étrange, mais c'est la façon préférée de gérer des situations comme celle-ci. – Will

Répondre

3

J'ai découvert la raison pour laquelle cela ne fonctionne pas. Il s'avère que dans SharePoint 2010, le chemin crossdomain.xml et clientaccesspolicy sont exclus du fournisseur de chemin d'accès virtuel et ne seront donc jamais diffusés à partir de la base de données de contenu SharePoint.

Le code est caché dans le Sharepoint SPRequestModule (voir ci-dessous). La seule solution raisonnable consiste à déployer le fichier crossdomain.xml à la racine d'IIS sur chacun des serveurs Web, ce qui est loin d'être idéal.

[SharePointPermission(SecurityAction.Demand, ObjectModel=true)] 
void IHttpModule.Init(HttpApplication app) 
{ 
    if (app is SPHttpApplication) 
    { 
     if (!_virtualPathProviderInitialized) 
     { 
      lock (_virtualServerDataInitializedSyncObject) 
      { 
       if (!_virtualPathProviderInitialized) 
       { 
        Dictionary<string, ExclusionAttributes> dictionary = new Dictionary<string, ExclusionAttributes>(StringComparer.OrdinalIgnoreCase); 
        dictionary["/app_themes"] = ExclusionAttributes.Folder; 
        dictionary["/app_browsers"] = ExclusionAttributes.Folder; 
        dictionary["/defaultwsdlhelpgenerator.aspx"] = ExclusionAttributes.File; 
        dictionary["/clientaccesspolicy.xml"] = ExclusionAttributes.File; 
        dictionary["/crossdomain.xml"] = ExclusionAttributes.File; 
        VirtualPathProvider virtualPathProvider = HostingEnvironment.VirtualPathProvider; 
        if ((virtualPathProvider != null) && virtualPathProvider.DirectoryExists("/")) 
        { 
         VirtualDirectory directory = virtualPathProvider.GetDirectory("/"); 
         if (directory != null) 
         { 
          IEnumerable children = directory.Children; 
          if (children != null) 
          { 
           foreach (VirtualFileBase base2 in children) 
           { 
            string str = base2.VirtualPath.TrimEnd(new char[] { '/' }); 
            ExclusionAttributes attributes = 0; 
            if (base2.IsDirectory) 
            { 
             attributes |= ExclusionAttributes.Folder; 
            } 
            else 
            { 
             attributes |= ExclusionAttributes.File; 
            } 
            dictionary[str] = attributes; 
           } 
          } 
         } 
        } 
        _excludedFileList = dictionary; 
        SPVirtualPathProvider provider2 = new SPVirtualPathProvider(); 
        HostingEnvironment.RegisterVirtualPathProvider(provider2); 
        _virtualPathProviderInitialized = true; 
       } 
       SPTemplateFileSystemWatcher.Local.Initialize(); 
       SPPerformanceCounterAgent current = SPPerformanceCounterAgent.Current; 
      } 
     } 
     app.BeginRequest += new EventHandler(this.BeginRequestHandler); 
     app.PostAuthenticateRequest += new EventHandler(this.PostAuthenticateRequestHandler); 
     app.PostAuthorizeRequest += new EventHandler(this.PostAuthorizeRequestHandler); 
     app.PostResolveRequestCache += new EventHandler(this.PostResolveRequestCacheHandler); 
     app.PostAcquireRequestState += new EventHandler(this.PostAcquireRequestStateHandler); 
     app.PreRequestHandlerExecute += new EventHandler(this.PreRequestExecuteAppHandler); 
     app.PostRequestHandlerExecute += new EventHandler(this.PostRequestExecuteHandler); 
     app.ReleaseRequestState += new EventHandler(this.ReleaseRequestStateHandler); 
     app.Error += new EventHandler(this.ErrorAppHandler); 
     app.PostLogRequest += new EventHandler(this.PostLogRequestHandler); 
     app.EndRequest += new EventHandler(this.EndRequestHandler); 
    } 
}