Ситуация (форма 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 ;
> }
Когда вы пытаетесь тестировать службу WCF, она, вероятно, работает как webservice и использует файл web.config, чтобы попытаться получить строку подключения. Когда вы запускаете приложение WinForms, служба WCF потенциально связана непосредственно в проекте Winforms, и в этом случае он использовал app.config из приложения winforms для извлечения строки подключения.
Совет. Проверьте, есть ли в вашем проекте службы WCF файл web.config и убедитесь, что он настроен на строку подключения к базе данных.