Вам нужно пометить cur_step как глобальный внутри вашей функции (а также снаружи, для правильного обозначения кода).
Функция может без проблем использовать переменную из родительской области видимости, если в области действия функции нет присваивания. Если где-то есть присваивание (даже если оно в блоке if), то функция интерпретируется как локальная; это верно даже до того момента, когда происходит его назначение.
Чтобы правильно воспринимать переменную, которая назначается в некоторой точке внутри функции, как глобальную, необходимо явно указать это внутри функции, используя global cur_step
.
Любой Вы используете неправильное имя (т.е. оно не назвало Bailey.DataLayer.dll), или оно не копируется в каталог bin на сборке. Этот последний не кажется вероятным как бы то ни было.
(См. мои комментарии к вопросу для разъяснения).
Вам нужны две записи в файле конфигурации, один на configSections элементе для объявления пользовательского раздела конфигурации и другого - сам фактический пользовательский раздел конфигурации. Вы добавляли обоих?
например:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
**<section name="Connections"
type="System.Configuration.DictionarySectionHandler" />**
</configSections>
<Connections
<add key="myServer" value="serverName" />
<add key="myPort" value="8080" />
<add key="myURI" value="RequestUri" />
<add key="UserId" value="joebob" />
<add key="password" value="$^%^&%$^&@%" />
/>
</configuration>
Можно хотеть взглянуть на http://www.primaryobjects.com/CMS/Article81.aspx, который содержит, почти строка для строки, код, который Вы показали выше, включая пример из web.config файла.