Правильно ли я использую службу WCF для получения данных от клиента и их хранения в базе данных? - PullRequest
0 голосов
/ 06 января 2012

Я уже определил контракт на обслуживание, и операции выполнены.Это 1 пример службы, которую я реализовал:

public int CreateIncident(string incidentName, string location, DateTime timeStamp)
{

    //Initilise db object to reference incidentDB database
    incDBEntities db = new incDBEntities();

    int incId = db.Incidents.Max(i => i.incId);

    // Create new record with incremented incident id and assigned fields 
    Incident inc = Incident.CreateIncident(++incId);

    inc.description = incidentName;
    inc.location = location;
    inc.whenReported = timeStamp;

    //Add the incident instance and save changes/updates made to database
    db.AddToIncidents(inc);
    db.SaveChanges();

    return inc.incId;
}

Клиент выполняет вызов этой службы с данными в качестве аргументов.

Можно ли назначать аргументы для полей данных ихранить данные в базе данных?В настоящее время я успешно могу отправлять данные локально через тестовый клиент WCF и сохранять их в базе данных.

Я не определяю контракты на данные.Поэтому я не уверен, будет ли эта служба работать, когда удаленные клиенты совершают звонки из приложений Android или Microsoft.

1 Ответ

0 голосов
/ 06 января 2012

Вам не нужно определять контракты данных, когда вы используете только примитивные типы в качестве параметров. Они считаются контрактами по умолчанию. Если вы хотите использовать сложный тип в качестве параметра, это должен быть DataContract. Если число параметров становится большим (скажем, больше 4) или вы хотите сгруппировать связанные параметры, вы можете инкапсулировать их в пользовательский тип, который затем должен быть DataContract.

Некоторым людям нравится всегда использовать DataContracts, даже если у них только один параметр. Это может упростить жизнь позже, когда вы захотите добавить параметр в операцию. Вам просто нужно добавить его в класс контракта данных, вместо того чтобы изменять каждый вызов, а также интерфейс контракта на обслуживание и класс, реализующий его. Это вопрос личных предпочтений.

Что касается хранения ваших данных, вы можете захотеть, чтобы ваш слой доступа к данным (incDBEntities) был членом класса, который вы создаете только один раз, а не каждый раз, когда вызывается операция.

...