WCF в IIS Как обновить dll в папке bin?

Я новичок в WCF. У меня была служба wcf в iis, которая работала нормально. Я внес изменения в код библиотеки DataAccessLibrary.dll, в которой основным классом является DAL. Файл service.cs ссылается на эту DLL. Я закинул новую dll в папку bin. Теперь в коде service.cs возникает ошибка, в которой говорится, что «DAL не существует в текущем контексте». Я думаю, что это как-то связано с классом service.cs, ссылающимся на старую dll, а не на новую. Но я не уверен, как это исправить.


person cyrix86    schedule 05.02.2010    source источник


Ответы (1)


В худшем случае, если код службы ссылается на сборку DAL в Visual Studio, нужно снова открыть проект/решение WCF, убедиться, что ссылка актуальна для DAL (либо по ссылке проекта, либо по ссылке DLL) и перестроить / переиздать.

Вероятно, есть лучшие способы, но это должно работать как запасной вариант...

ИЗМЕНИТЬ:

Чтобы предоставить некоторые отзывы о, возможно, более эффективном способе работы с разработкой WCF - вот как мы работаем над этими системами:

  1. Внешние общие библиотеки, такие как DAL, основные бизнес-сборки и т. д., хранятся в сети (например, под UNC, таким как \\DEVSTORE\CommonAssemblies\DAL\MyDal.dll и т. д.)
  2. В приложении WCF в Visual Studio добавьте фактическую ссылку на библиотеки DLL в сети. Настройки по умолчанию будут копировать dll локально в папку bin во время сборки.
  3. Используйте функцию публикации в Visual Studio, чтобы вывести папку svc, bin, web.config и т. д. либо во временную папку, либо в саму папку приложения IIS.
  4. При работе с общим DAL или другими распространенными библиотеками в VS просто убедитесь, что при сборке вы помещаете копию DLL в общее сетевое расположение.

Создает довольно простой опыт разработки.

person KP.    schedule 05.02.2010
comment
Под повторной публикацией вы имеете в виду размещение всех необходимых файлов (файл интерфейса, файл класса обслуживания и DLL) в правильную папку в IIS? В проект веб-службы не добавлены ссылки с помощью параметра добавления ссылки. Тем не менее, класс интерфейса и класс службы имеют оператор using для DataAccessLibrary.dll. Глядя в проводник решений, у него есть папка Bin со всеми DLL из других проектов в решении. Этот проект достался мне по наследству, поэтому я мало что о нем знаю. - person cyrix86; 05.02.2010
comment
Таким образом, сборка DAL должна быть добавлена ​​вручную в папку bin для проекта WCF в Visual Studio, иначе она никогда не будет построена (с той же ошибкой, которую вы указали)... Если у вас есть решение WCF в VS, проверьте bin для DLL, вам может потребоваться перезаписать его там. Какие изменения кода вы внесли (например, новые функции, изменения пространства имен, изменения уровня доступа — частный/общедоступный и т. д.)? - person KP.; 05.02.2010
comment
ничего подобного, в библиотеке DAL есть метод, который запрашивает БД. Все, что я сделал, это добавил еще одно условие AND в SQL. Я проверил, что код работает. У меня есть служба Windows, которая использует ту же библиотеку DAL, и она работает без проблем. Проблема в том, что само имя класса DAL не распознается при вызове в коде service.cs. Я попытаюсь перезаписать библиотеки DLL в папке Bin проекта wcf, а затем перестроить/развернуть в IIS. Я вернусь к вам через минуту - person cyrix86; 05.02.2010
comment
хорошо, я удалил старую dll из корзины и добавил новую dll из проекта DAL, и теперь DAL не существует в текущем контексте, выдается как ошибка сборки в классе service.cs. Я еще не развернул IIS - это в VS - person cyrix86; 05.02.2010
comment
Хорошо, nvm, по какой-то причине имя класса DAL изменилось на Dal, поэтому, когда я изменил код service.cs с DAL.method() на Dal.method(), он отлично строится. - person cyrix86; 05.02.2010
comment
сейчас попробую перейти на IIS - person cyrix86; 05.02.2010
comment
Хорошо, что сделал это! все работает отлично. Мне пришлось скомпилировать библиотеку DAL, вручную добавить скомпилированную dll в папку Bin службы wcf, а затем собрать проект wcf. Затем я удалил библиотеку service.cs и DAL из IIS и вставил новые. Какая боль! Я новичок в WCF, так почему проект wcf настроен таким образом? - person cyrix86; 05.02.2010
comment
По какой-то причине кажется, что ваш предшественник хотел сохранить библиотеку DAL внешней по отношению к приложению/проекту WCF. Это нормально, однако в этом случае было бы лучше иметь сетевое расположение или расположение на диске, где хранятся предварительно скомпилированные/общие библиотеки DLL. Из своего приложения WCF вы добавляете фактическую ссылку на него. Затем, если вы создадите библиотеку DAL и перезапишете общую сборку в сети, вы просто перестроите приложение WCF, и оно получит последнюю версию DAL без ручного копирования в папку bin. - person KP.; 05.02.2010
comment
В конце концов, похоже, проблема была в вашем корпусе (где DAL стал Dal). С# чувствителен к регистру, поэтому, конечно, ваш код сломается... - person KP.; 05.02.2010
comment
Странно то, что изначально в окне кода VS DAL был в порядке - без ошибок. Ошибка корпуса проявилась только после того, как я вручную перезаписал DLL DAL в папке Bin проекта wcf. - person cyrix86; 05.02.2010
comment
В любом случае, большое спасибо за помощь, Кевин. - person cyrix86; 05.02.2010