Мне нужно создать приложение службы WCF, в котором хранится некоторая статическая информация в списках, а также методы для запроса этой информации. Служба размещается в консольном приложении и позже будет превращена в реальную базу данных с каркасом сущностей.
У меня есть следующие классы Doctor
, Patient
, UserAccount
и интерфейс IService1
,с методами, предназначенными для использования этими классами.
У меня пока есть 3 проблемы
- Метод входа в систему всегда возвращает false.
- Метод
DoctorByID
, возвращает только последний созданный Doctor
объект - Метод
PatientByID
такой же, как в методе DoctorByID
.
Файлы cs находятся втот же проект, сборки проекта и веб-сервисы все обновляются. Когда я ставлю списки на часы, они заполняются, как и ожидалось. Я не знаю, где все идет не так.
//The interface and the classes
[ServiceContract]
public interface IService1
{
[OperationContract]
string DoctorById(string ID);
[OperationContract]
bool Login(string name, string ID)
}
[DataContract]
public class Doctor
{
[DataMember]
public static List<Doctor> ListOfDoctors = new List<Doctor>();
[DataMember]
public string Name { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public string ID { get; set; }
[DataMember]
public DateTime DateOfBirth { get; set; }
public Doctor(string name, string lastName, string id, DateTime dateOfBirth)
{
Name = name;
LastName = lastName;
ID = id;
DateOfBirth = dateOfBirth;
//Adds the created doctors to the list
ListOfDoctors.Add(this);
}
}
//The DataContracts for the patients and UserAccounts look almost the same.
//Object instantiation and method implemenation
public class Service1: IService1
{
public static Doctor doctor1 = new Doctor("Simon", "Doe", "doc1", new DateTime(1996, 08, 08));
public static Doctor doctor2 = new Doctor("John", "Doe", "doc2", new DateTime(1966, 12, 10));
public static Doctor doctor3 = new Doctor("Mike", "Ray", "doc3", new DateTime(1990, 02, 18));
public static UserAccount user1 = new UserAccount("Edd", "password", true);
public static UserAccount user2 = new UserAccount("Tony", "password", true);
public static UserAccount user3 = new UserAccount("John", "1234", false);
//METHOD FROM ISSUE NO.1
public bool Login(string userName, string pass)
{
bool answer = "";
foreach(UserAccount acc in UserAccount.ListOfUsers)
{
if (acc.UserName == userName && acc.Password == pass)
{
if (acc.AdminRights == true)
{
Console.WriteLine("You have Admin Rights");
answer = true;
}
else Console.WriteLine("You do not have Admin rights");
answer = false;
}
}
else Console.WriteLine("Account does not exist");
answer = false;
}
return answer ;
}
//METHOD FROM ISSUE NO.2
public string PatientById(string ID)
{
string answer = "";
foreach(Patient p in Patient.ListOfPatients)
{
if (p.ID == ID)
{
answer = "patient ID :" + p.ID + " Name: " + p.name + " LastName: " + p.lastName;
}
else
{
answer = "The patient with this ID does not exist";
}
}
return answer;
}
Так как я не могу публиковать фотографии здесь, я помещаю скриншоты на img. Их загрузка занимает пару секунд
Вот ссылки на выходные данные, которые я получил через тестовый клиент Wcf:
- https://ibb.co/h1ghZ7y - Функция входа в системувозвращает
false
, несмотря на то, что объект имеет значение bool, равное true. - https://ibb.co/BqJWqQC -Функция
DoctorByID
возвращает "Идентификатор врача не существует", но объект с этим ID
находится в списке. - https://ibb.co/SQkJRcy -Функция
DoctorByID
возвращает данные об объекте, но делает это только тогда, когда я помещаю последний объект в список в качестве параметра.