Question

J'ai un modèle BDC dans l'un de mes projets SharePoint. Ce modèle doit finalement être déployé sur 3 environnements: dev, tester et production. Maintenant, mon environnement de développement n'a qu'une seule application Web sur le port 80, et c'est celui que mon modèle est déployé pour automatiquement par magie.

Pour le test et la production, c'est une histoire différente. Ces environnements ont le contenu principal et les applications Web de mon site sur le port 80, à l'aide des en-têtes d'hôtes. Le problème est que je ne puisse pas déployer mon modèle BDC dans le test ou la production sans d'abord dire au modèle quelle application Web à déployer. Pour autant que je sache, la seule façon de le faire est de coder l'URL absolue de l'application Web dans le modèle avant de construire le WSP. Étant donné que les URL sont différentes pour chaque environnement, je dois construire différents WSPS pour Dev, Test et Production. Pas cool. Le problème est aggravé par le fait que l'URL est définie dans un fichier contrôlé par la source. Je dois donc vérifier ce fichier, définir l'URL, construire le WSP, le déploiement, le test, puis annuler ma commande. Je préférerais de loin avoir un processus de construction automatisé pour moi pour moi.

J'ai lu ailleurs que cela peut être évité en n'ayant qu'une seule application Web sur le port 80. Est-ce recommandé? Cela semble ne pas avoir que mes sites sur le port 80 pourraient être problématiques. Y a-t-il d'autres recommandations ou suggestions qui me manquent?

Était-ce utile?

La solution

Si je vous comprends correctement, vous souhaitez définir la bonne application Web pour votre modèle BCS.En fait, toute application Web pouvant se connecter à l'application de service BCS sera effectuée.J'ai rencontré le même problème et j'ai créé un récepteur de fonctionnalité pour la fonctionnalité BCS déployant le type de contenu externe pour définir l'application Web de manière dynamique. Il fonctionne donc dans tous les environnements: Dev, Test, Production.Dans mon cas, toutes les applications Web avaient un proxy d'application de service BCS et j'ai simplement utilisé simplement la première application Web.Cela pourrait être différent dans d'autres scénarios.

public class ExternalContentTypesEventReceiver : ImportModelReceiver
{
    /// <summary>
    /// Occurs after a Feature is activated.
    /// The BDC deployment requires a valid site url property to retrieve a service context object.
    /// </summary>
    /// <param name="properties">An <see cref="T:Microsoft.SharePoint.SPFeatureReceiverProperties"/> object that represents the properties of the event.</param>
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        var farm = properties.Feature.Parent as SPWebService;
        var application = farm.WebApplications.FirstOrDefault();

        var siteUrl = application.AlternateUrls.FirstOrDefault(u => u.UrlZone == SPUrlZone.Default).IncomingUrl;

        // Set site url property so that the external content type can be deployed.
        if (properties.Definition.Properties["SiteUrl"] == null)
        {
            properties.Definition.Properties.Add(new SPFeatureProperty("SiteUrl", siteUrl));
        }

        base.FeatureActivated(properties);
    }

    /// <summary>
    /// Features the deactivating.
    /// The BDC deployment requires a valid site url property to retrieve a service context object.
    /// </summary>
    /// <param name="properties">The properties.</param>
    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        var farm = properties.Feature.Parent as SPWebService;
        var application = farm.WebApplications.FirstOrDefault(w => w.Sites.Count > 0);

        var siteUrl = application.AlternateUrls.FirstOrDefault(u => u.UrlZone == SPUrlZone.Default).IncomingUrl;

        if (properties.Definition.Properties["SiteUrl"] == null)
        {
            properties.Definition.Properties.Add(new SPFeatureProperty("SiteUrl", siteUrl));
        }

        base.FeatureDeactivating(properties);
    }

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top