Frage

ich über dieses Problem kommen, wenn ich einen Ereignishandler in Sharepoint schreibe. Mein Event-Handler hat eine Web-Referenz. Wenn ich diese Web-Referenz erstellen, wird die URL des Webdienstes in der .config-Datei der Baugruppe hinzugefügt werden. Wenn ich die Web-Referenz-URL ändern müssen muss ich nur noch den Link in der Konfigurationsdatei ändern.

Problem kommt, wenn ich zu GAC die dll versuchen. Wenn ich GAC die DLL kann die Konfigurationsdatei mit dem DLL nicht GACed werden entlang, und daher gibt es keine Möglichkeit für mich, die Web-Referenz zu aktualisieren.

Eine Abhilfe ich gefunden habe, ist es, die Konstruktor-Methode Reference.cs Klasse zu ändern, die von Visual Studio automatisch generiert wird, wenn ich einen Verweis hinzufügen, so dass der Konstruktor die Web-Service-URL von einem anderen Ort liest, sagt eine Registrierung oder eine XML Datei in einer vorbestimmten Lage. Aber dies stellt ein Problem manchmal, als wenn ich die Web-Update referenc Visual Studio verwenden, diese Datei Reference.cs regeneriert wird, und alle meine Änderungen verloren gehen würden.

Gibt es einen besseren Weg, um dieses Problem zu lösen?

War es hilfreich?

Lösung

Wenn Sie Visual Studio 2008 haben, verwenden Sie einen Dienstverweis anstelle eines Web-Referenz, die Teil-Klassen generieren, die Sie Funktionalität außer Kraft zu setzen, ohne den Code durch den Generator überschrieben verwenden können.

Für Visual Studio 2005, können Sie fügen Sie einfach die Teil Stichwort in die Klasse in Reference.cs und hält eine separate Datei mit dem eigenen Teilklasse:

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

WebServiceReference svc = new WebServiceReference(myConfig);

Andere Tipps

Jede von Sharepoint gehostete Anwendung, die web.config an der Wurzel Ihrer Sharepoint-Website in IIS befindet verwenden. Was Sie tun müssen, ist die Konfiguration des Web / Service-Referenz-Assistenten zu Ihrer web.config.

erzeugt hinzufügen

Das ist in etwa so funktioniert es:

  • Sharepoint-Anwendungspool lädt Ihre DLL
  • Ihre DLL sucht die Service-Informationen in der aktuellen Anwendungskonfigurationsdatei
  • Ihre DLL findet web.config und sucht nach Konfigurationsinformationen dort

Grundsätzlich ist die app.config, die in der DLL erzeugt wird, wird nicht verwendet. Da die Anwendung in diesem Fall ist die Anwendung Pool (w3wp.exe), die die Sharepoint-Anwendung gehostet wird. Für Sharepoint ist die app.config tatsächlich web.config genannt und befindet sich an der Wurzel der Sharepoint-Website.

ich beschlossen dies, indem die Web-Referenz machen dynamische für meine Klassenbibliothek und dann das Kopieren der Konfigurationsapplication Abschnitt der Web-Referenz aus der app.config-Datei in meine Sharepoint-Website web.config enthält.

Beachten Sie auch den Eintrag in application web.config kopieren müssen, da dies in der Regel dort nicht.

Sie können dies versuchen: Anstatt die dynamische Web-Referenz verwendet machen es zu einem statischen Verweis so, dass der Code in Reference.cs nicht gehen für einen Wert in der .config-Datei für die URL suchen. Dann Unterklasse des generierten Web-Service-Client-Code und in dieser abgeleiteten Klasse, fügen Sie Ihre eigene Logik, die .url Eigenschaft festlegen. Dann können VS.NET wieder gen Reference.cs alle es mag, und Ihre URL Einstellcode bleiben. Natürlich müssen Sie einen Downstream-Code aktualisieren Sie Ihre abgeleitete Klasse zu verwenden, aber das sollte eine einfache globale ersetzen sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top