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