Получение NullRef при тестировании службы WCF

1

Ситуация (форма Windows): я создал приложение, которое позволяет аптечное приложение, которое добавляет пациентов, медикаментов, врачей... Это приложение Winforms. Я могу добавить пациентов без проблем... У меня есть файл конфигурации, который содержит строку подключения. Я могу без проблем получить доступ к БД. При загрузке страницы Winform заполняет 4 ComboBoxes (2 письма, лекарства, врачи, страховые компании). Это приложение N-уровня (UI, EntityObject (EO), уровень бизнес-процессов (BPL), уровень доступа к данным (DAL), база данных (DB)). Поток Winform (WindowUI> BPL> DAL> DB) (Это интранет.

Ситуация (веб-форма, сервис) Мне теперь нужно иметь удаленный доступ к приложению (веб-форма, Интернет)... Я создал проект службы WCF в том же решении, что и проект окна. Я не внес изменений в поток приложений winform. Услуга идет непосредственно за BPL. Предлагаемый веб-поток (WebUI> Служба WCF> BPL> DAL> DB)

Существует класс утилит, в котором содержится метод открытия базы данных DB, который возвращает объект SQLCommand в BPL.

Проблема. Когда я пытаюсь "протестировать" службу, я получаю ненулевое значение в выводе catch, которое я не получаю при запуске формы Windows. Что мне не хватает...?

"Call to the BPL from the service:"
    Namespace pharmapp
    public DataSet StateDS()
    {
       return StateBPL.StateFillDS();  //returns the state dataset to the service consumer
    }

    "Calls the util class and the DAL"
        Namespace pharmapp
        public class StateBPL
        {
           Public static DataSet StateFillDS()
           {
              var cmdobj = new SQLCommand();
              cndobj = PharmAppUtil.OpenDB();  //calls the utilities class
              cmdobj.commandText = "spGetStates"; //adds stored procedure name
              return StateDAL.StateDSFill(cmdobj);  // call the Data access class and 
                                                     //returns a dataset
           }
        }

> "Utilities calls returns a command object to the BPL minus the
> stored procedure name"
>     Utilties Class:
      Namespace pharmapp
>     public class PharmAppUtil
>     {
>         SqlConnection conn = new SqlConnection();
>         public static SqlCommand OpenDB()
>         {
>             SqlConnection conn = new SqlConnection();
>             try
>             { 
>                var connSettings = ConfigurationManager.ConnectionStrings;
>                if (connSettings.Count < 1)
>                {
>                    Debug.WriteLine("NO Connection string found.");
>                    return null;
>                }
>                else
>                {
>                   conn.ConnectionString = 
>                        ConfigurationManager.ConnectionStrings["PharmaConn"].ToString();
>                   conn.Open();
>                   SqlCommand cmd = new SqlCommand();
>                   cmd.Connection = conn;
>                   cmd.CommandType = CommandType.StoredProcedure;
>                   return cmd;
>                }
>             }
>             catch (SqlException ex)
>             {
>                 Debug.WriteLine(ex.Message);
>                 return null;
>             } 
>             catch (NullReferenceException ex)
>             {
>                 Debug.WriteLine(ex.Message);
>                 return null;
>             }
>             finally
>             {
> 
>             }
>             //return ; 
>      }
  • 0
    Он сбрасывается до значения nullref, когда попадает в класс pharmutil: conn.ConnectionString => ConfigurationManager.ConnectionStrings ["PharmaConn"]. ToString (); Однако, когда форма Windows запускается ... нет проблем ... Только из вызова службы ... К вашему сведению, я использую тестовый клиент WCF для тестирования в настоящее время ...
Теги:
winforms
web-services
wcf

1 ответ

0
Лучший ответ

Когда вы пытаетесь тестировать службу WCF, она, вероятно, работает как webservice и использует файл web.config, чтобы попытаться получить строку подключения. Когда вы запускаете приложение WinForms, служба WCF потенциально связана непосредственно в проекте Winforms, и в этом случае он использовал app.config из приложения winforms для извлечения строки подключения.

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

  • 0
    Это сработало ... однако, зачем сервисному вызову получить счетчик из app.config (в web.conig не было раздела строки соединения), а затем попытаться получить константу из web.config?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню