веб-служба — функция веб-клиента не будет записывать данные в БД

#wcf #web-services

#wcf #веб-службы

Вопрос:

Я не могу записать какие-либо записи в свою базу данных с помощью веб-службы. Служба настроена нормально и может получить к ней доступ через uri, а также запросить мою базу данных через службу, используя созданную мной простую страницу.

Когда дело доходит до записи в базу данных, я не получаю никаких ошибок, и экземпляр моего WebClient, который заполнен переменными для записи в БД, содержит все переменные в порядке, но когда дело доходит до фактической записи в БД (см. Код ниже), похоже, ничего не происходит, за исключением того, что возвращается идентификатор участника последнего существующего участника, добавленного в базу данных.

         'assign all abMem fields to values within form to write to database
        newMem.Title = ddTitle.SelectedValue
        newMem.Initials = txtInitials.Text
        newMem.Surname = txtSurname.Text
        newMem.Address1 = txtAdd1.Text
        newMem.Address2 = txtAdd2.Text
        newMem.Address3 = txtAdd3.Text
        'etc etc .... additional fields have been removed

        Try
            cc.Open()
            cc.CreateMember(newMem)
            returnMem = cc.GetMember(newMem)
            MesgBox(returnMem.MemberID amp; " - Member Created")
            cc.Close()
        Catch cex As CommunicationException
            MesgBox("CommEX - " amp; cex.Message)
            cc.Abort()
        Catch tex As TimeoutException
            MesgBox("TimeEX - " amp; tex.Message)
            cc.Abort()
        Finally
            MesgBox("Closed the Client")
        End Try
  

Когда я запускаю вышеописанное, я заметил в файле журнала для службы (в папке system32 на моем сервере), что каждый раз выполняются 2 запроса — предположительно, один для того, куда я пытаюсь добавить запись, а другой, как я думаю, будет запросом идентификатора этого участника (который не создан, поэтому я полагаю, что он просто возвращает последнюю успешную запись в таблице).

Я знаю, что с реальной веб-службой проблем нет, поскольку есть другой пользователь, успешно способный добавлять в БД через службу (к сожалению, я не могу просто скопировать их настройки, поскольку они запускают их через страницу php), поэтому я знаю, что где-то в моем коде проблема.

Является ли cc.CreateMember(newMem) правильным синтаксисом для передачи сведений о члене функции в веб-службе, это то, что мне интересно?

Комментарии:

1. Вам не нужно выполнять a, cc.SaveChanges когда вы используете cc.CreateMember метод?

2. Я бы так не подумал, нет. ‘CreateMember’ — это имя функции в моей реальной службе, которая запрашивает базу данных с подробностями о новом члене (переданном с моей тестовой страницы), чтобы узнать, существует ли этот член уже (по имени и адресу и т.д.). Если член не существует, служба должна выполнить простую вставку, но эта часть службы не запущена (насколько я могу видеть).

3. Извините, по какой-то причине я думал, что entity framework вместо вызова службы. Я предполагаю, что вы прошли через это в режиме отладки, и это действительно выполняет вызов? Если это так, то, по-видимому, сбой должен заключаться в самой службе.

4. Похоже, что функция вызывается нормально, как я уже сказал, экземпляр WebClient заполняется значениями, как и ожидалось, и я не вижу никаких ошибок или исключений, когда он доходит до строки cc.CreateMember(newMem) — хотя я предполагаю, что проблема должна заключаться в этом, поскольку другие пользователи могут зайти в службу и добавить запись в базу данных НОРМАЛЬНО…

5. Имеет ли пользователь БД привилегии для записи в базу данных?

Ответ №1:

Я переписал код (кажется, идентичный приведенному выше) и повторно опубликовал веб-службу. Кажется, сейчас все работает нормально, так что, должно быть, у меня где-то произошла какая-то глупая ошибка!