Domanda

Mi imbatto in questo problema quando scrivo un gestore di eventi in SharePoint. Il mio gestore eventi ha un riferimento web. Quando creo questo riferimento Web, l'URL del servizio Web verrà aggiunto nel file .config dell'assembly. Se devo cambiare l'URL di riferimento web, devo solo cambiare il link nel file di configurazione.

Il problema si presenta quando provo a GAC ??la dll. Quando eseguo il GAC della DLL, non è possibile eseguire il GAC del file di configurazione insieme alla dll e pertanto non è possibile aggiornare il riferimento Web.

Una soluzione alternativa che ho trovato è quella di modificare il metodo del costruttore classe Reference.cs che viene generato automaticamente da Visual Studio quando aggiungo un riferimento, in modo che il costruttore legga l'URL del servizio Web da un'altra posizione, ad esempio un registro o un XML file in una posizione predeterminata. Ma questo a volte pone un problema, come quando aggiorno il riferimento web usando Visual Studio, questo file Reference.cs viene rigenerato e tutte le mie modifiche andrebbero perse.

Esiste un modo migliore per risolvere questo problema?

È stato utile?

Soluzione

Se si dispone di Visual Studio 2008, utilizzare un riferimento di servizio anziché un riferimento Web, che genererà classi parziali che è possibile utilizzare per sovrascrivere la funzionalità senza che il codice venga sovrascritto dal generatore.

Per Visual Studio 2005, potresti semplicemente aggiungere la parola chiave parziale alla classe in Reference.cs e mantenere un file separato con la tua classe parziale:

public partial class WebServiceReference
 { public WebServiceReference(ExampleConfigurationClass config) 
    { /* ... */
    }
 }

WebServiceReference svc = new WebServiceReference(myConfig);

Altri suggerimenti

Qualsiasi applicazione ospitata da SharePoint utilizza il file web.config situato nella directory principale del sito Web di SharePoint in IIS. Quello che devi fare è aggiungere la configurazione generata dalla procedura guidata di riferimento Web / servizi al tuo web.config.

Questo è approssimativamente come funziona:

  • Il pool di applicazioni di SharePoint carica la DLL
  • La DLL cerca le informazioni sul servizio nel file di configurazione dell'applicazione corrente
  • La tua DLL trova web.config e cerca le informazioni di configurazione lì

Fondamentalmente, l'app.config che viene generato nella tua DLL non viene utilizzato. Poiché l'applicazione in questo caso è il pool di applicazioni (w3wp.exe) che ospita l'applicazione SharePoint. Per SharePoint app.config in realtà si chiama web.config ed esiste nella radice del sito Web di SharePoint.

L'ho risolto rendendo dinamico il riferimento web per la mia libreria di classi e quindi copiando la sezione di configurazione applicationSettings contenente il riferimento web dal file app.config nel mio sito web Sharepoint web.config.

Nota che dovrai anche copiare la voce per applicationSettings nel tuo web.config poiché questo non è normalmente presente.

Potresti provare questo: piuttosto che usare il riferimento web dinamico rendilo un riferimento statico in modo che il codice in Reference.cs non vada alla ricerca di un valore nel file .config per l'URL. Quindi classificare il codice client del servizio Web generato e in quella classe derivata aggiungere la propria logica per impostare la proprietà .Url. Quindi VS.NET può rigenerare Reference.cs tutto ciò che gli piace e il tuo codice di impostazione dell'URL rimarrà. Ovviamente, devi aggiornare qualsiasi codice downstream per usare la tua classe derivata, ma dovrebbe essere una semplice sostituzione globale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top