Добавление веб-ссылки на DLL, которая GACed - PullRequest
4 голосов
/ 24 сентября 2008

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 24 сентября 2008

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

Это примерно так:

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

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

1 голос
/ 24 сентября 2008

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

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

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

WebServiceReference svc = new WebServiceReference(myConfig);
0 голосов
/ 26 сентября 2008

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

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

0 голосов
/ 24 сентября 2008

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

...