Добавление веб-ссылки на библиотеку DLL, которая имеет GACed

StackOverflow https://stackoverflow.com/questions/125369

Вопрос

Я сталкиваюсь с этой проблемой, когда пишу обработчик событий в SharePoint.У моего обработчика событий есть веб-ссылка.Когда я создам эту веб-ссылку, URL веб-службы будет добавлен в файл .config сборки.Если мне нужно изменить URL веб-ссылки, мне просто нужно изменить ссылку в файле конфигурации.

Проблема возникает, когда я пытаюсь загрузить библиотеку dll.Когда я загружаю DLL, файл конфигурации не может быть загружен вместе с dll, и, следовательно, у меня нет возможности обновить веб-ссылку.

Один из найденных мной обходных путей - изменить класс Reference.cs метода конструктора, который автоматически генерируется visual studio при добавлении ссылки, чтобы конструктор считывал URL веб-службы из какого-либо другого местоположения, скажем, из реестра или XML-файла в некотором заранее определенном местоположении.Но иногда это создает проблему, так как когда я обновляю веб-ссылку с помощью visual studio, этот файл Reference.cs восстанавливается заново, и все мои изменения будут потеряны.

Есть ли лучший способ решить эту проблему?

Это было полезно?

Решение

Если у вас Visual Studio 2008, используйте ссылку на службу вместо веб-ссылки, которая будет генерировать частичные классы, которые вы можете использовать для переопределения функциональности без перезаписи вашего кода генератором.

Для Visual Studio 2005 вы могли бы просто добавить частичный добавьте ключевое слово к классу в Reference.cs и сохраните отдельный файл с вашим собственным частичным классом:

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

WebServiceReference svc = new WebServiceReference(myConfig);

Другие советы

Любое приложение, размещенное в SharePoint, использует web.config, расположенный в корневом каталоге вашего веб-сайта SharePoint в IIS.Что вам нужно сделать, это добавить конфигурацию, сгенерированную мастером ссылок на веб-службы, в ваш web.config.

Примерно так это и работает:

  • Пул приложений SharePoint загружает вашу библиотеку DLL
  • Ваша библиотека DLL ищет служебную информацию в текущем файле конфигурации приложения
  • Ваша библиотека DLL находит web.config и ищет там информацию о конфигурации

По сути, app.config, который генерируется в вашей библиотеке DLL, не используется.В качестве приложения в данном случае является пулом приложений (w3wp.exe), на котором размещается приложение SharePoint.Для SharePoint app.config на самом деле называется web.config и существует в корневом каталоге веб-сайта SharePoint.

Я решил эту проблему, сделав веб-ссылку динамической для моей библиотеки классов, а затем скопировав раздел конфигурации ApplicationSettings, содержащий веб-ссылку, из файла app.config в web.config моего сайта Sharepoint.

Обратите внимание, что вам также нужно будет скопировать запись для ApplicationSettings в ваш web.config, поскольку обычно этого там нет.

Вы могли бы попробовать это:Вместо использования динамической веб-ссылки сделайте ее статической ссылкой, чтобы код в Reference.cs не искал значение URL-адреса в файле .config.Затем создайте подкласс сгенерированного клиентского кода веб-службы и в этом производном классе добавьте свою собственную логику для установки свойства .Url.Затем VS.NET можно повторно генерировать Reference.cs сколько угодно, и ваш код настройки URL останется.Конечно, вам придется обновить любой нисходящий код, чтобы использовать ваш производный класс, но это должна быть простая глобальная замена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top