ApplyWebConfigModifications δεν εργάζονται στο αγρόκτημα

ψήφοι
1

Έτσι, προσπαθώ να αναπτύξετε ένα χαρακτηριστικό διαδικτυακή εφαρμογή που ενημερώνει το web.config χρησιμοποιώντας τη συλλογή WebConfigModifications. Υπάρχουν πολλές πληροφορίες σχετικά με τον τρόπο αυτό, συμπεριλαμβανομένων όλων των θεμάτων που θα συναντήσει οπότε είμαι πολύ σίγουρος στον κώδικα, αλλά δεν έχει σημασία αυτό που προσπαθώ τα στοιχεία config δεν προστίθενται στο web config. Αυτό λειτουργεί καλά για την ανάπτυξη ενιαίας περιβάλλον server, αλλά δεν ενημερώνει το αγρόκτημα.

Δεν λάθη, δεν υπάρχουν πληροφορίες καταγραφής χωρίς μηνύματα συμβάντων .... τίποτα δεν δείχνει προς γι 'αυτό δεν θα ενημερώσει:

SPWebConfigModification appSettingModification = νέα SPWebConfigModification ()?
appSettingModification.Name = προσθέτουν [@key = \ Κλειδί \ ] [@ value = \ Αξία \ ]?
appSettingModification.Path = διαμόρφωση / appSettings?
appSettingModification.Owner = «ιδιοκτήτης»?
appSettingModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode?
appSettingModification.Value = __appSettingResource?

εάν (removeModification)
{
app.WebConfigModifications.Remove (appSettingModification)?
}
Αλλού
{
app.WebConfigModifications.Add (appSettingModification)?
}
App.Update ()?
app.Farm.Services.GetValue <SPWebService> () ApplyWebConfigModifications ().?

==============================

ΕΠΕΞΕΡΓΑΣΙΑ

Ήθελα να προσθέσω σε αυτό βασίζεται σε μια πρόταση του Drax να αντικατοπτρίζει την μέθοδο ApplyWebModifications. Αυτή η μέθοδος είναι σχετικά με την SPWebService που είναι στο χώρο ονομάτων Microsoft.SharePoint.Administration στο συγκρότημα Microsoft.SharePoint.

Ένα από τα ζητήματα με τη χρήση αυτής της μεθόδου είναι ότι όλα τα αρχεία web.config ενημερώνονται στο αγρόκτημα, ακόμη και αν εφαρμόζονται στην πραγματικότητα καμία τροποποίηση. Αυτό προκαλεί τις πισίνες app για να ανακυκλωθούν, ακόμη και αν δεν σκοπεύετε να ενημερώσετε το web config. Ο προβληματισμός δείχνει γιατί συμβαίνει αυτό και είναι πολύ ενοχλητικό.

Στο εσωτερικό του μέθοδος είναι μία μικρή θηλιά foreach:

foreach (αίτηση SPWebApplication σε this.WebApplications)
{
application.ApplyWebConfigModifications ()?
}

Είναι looping μέσα από κάθε μια από τις εφαρμογές web και ζητώντας μια ΕΣΩΤΕΡΙΚΗ μέθοδο ApplyWebConfigModifications στα αντικείμενα web εφαρμογή. Αν το μόνο που κάνει αυτή τη μέθοδο δημόσιας τότε θα είμαστε σε θέση να καλέσει τη μέθοδο ξεχωριστά χωρίς να επηρεάζει την ανακύκλωση πισίνα app για web εφαρμογές που δεν επηρεάζονται από ενημερώσεις μας. Απλά λέω'

Δημοσιεύθηκε 09/12/2008 στις 16:53
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Το πρόβλημα αυτό είναι σφάλμα. Νομίζω.

SPWebService.ApplyWebConfigModifications()

public void ApplyWebConfigModifications()
{
  if (base.Farm.TimerService.Instances.Count > 1)
  {
    SPWebConfigJobDefinition definition = new SPWebConfigJobDefinition(this);
    definition.Schedule = new SPOneTimeSchedule(DateTime.Now);
    try
    {
      definition.Update();
      return;
    }
    catch (Exception exception)
    {
      if (exception is SPDuplicateObjectException)
      {
        throw new InvalidOperationException(SPResource.GetString("WebconfigModificationAlreadyRunning", new object[0]), exception);
      }
      throw;
    }
  }
  string strMessage = string.Empty;
  **foreach (SPWebApplication application in this.WebApplications)**
  {
    ULS.SendTraceTag(0x38386866, ULSCat.msoulscat_WSS_Topology, ULSTraceLevel.Medium, "Apply web config modifications to web app {0} ", new object[] { application.GetResponseUri(SPUrlZone.Default).ToString() });
    try
    {
      application.ApplyWebConfigModifications();
Απαντήθηκε 25/01/2011 στις 01:44
πηγή χρήστη

ψήφοι
0

πρόβλημα είναι πιθανότητα και στην κλήση σας ApplyWebCOnfigModifications () αντί για:

app.Farm.Services.GetValue () ApplyWebConfigModifications ().?

χρήση:

app.Farm.Servers.GetValue <SPWebService> () ApplyWebConfigModifications ().?

Ο δεύτερος κωδικός καλεί στην πραγματικότητα υπηρεσία που είναι υπεύθυνη για την ενημέρωση των αρχείων web.config.

Υποσημείωση: Ο κωδικός αυτός θα ανοίξει στην πραγματικότητα όλα τα αρχεία webconfig σε όλες τις webapplications εγκατεστημένο στον server / αγρόκτημα :) αλλά θα ενημερώσει ακριβώς σωστές. Αν θα χρησιμοποιήσετε ανακλαστήρα για να ανιχνεύσει αυτή τη μέθοδο θα δείτε μερικά ωραία παράδειγμα χρησιμοποιώντας foreach loop :)

Απαντήθηκε 09/12/2008 στις 17:30
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more