我是否正确使用WCF服务从客户端接收数据并将其存储在数据库中

本文关键字:数据 存储 数据库 端接 客户端 是否 WCF 客户 服务 | 更新日期: 2023-09-27 18:19:30

我已经定义了一个服务契约,并且实现了操作。这是我实现的一个服务示例:

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测试客户端在本地发送数据,并将其存储在数据库中。

我不是在定义数据合约。因此,我不确定当远程客户端从安卓或微软应用程序进行呼叫时,该服务是否有效。

我是否正确使用WCF服务从客户端接收数据并将其存储在数据库中

当您只使用基元类型作为参数时,不必定义数据契约。他们被认为有违约合同。如果要使用复杂类型作为参数,它必须是DataContract。如果参数的数量变大(比如超过4个),或者您想对相关参数进行分组,则可能需要将它们封装到一个自定义类型中,然后该类型必须是DataContract。

有些人喜欢总是使用DataContracts,即使它们只有一个参数。当您以后想要向操作中添加参数时,这可以使操作变得更容易。你只需要把它添加到数据契约类中,而不是改变每个调用,再加上服务契约接口和实现它的类。这是个人偏好的问题。

至于存储数据,您可能希望将数据访问层(incDBEntities)作为类成员,只实例化一次,而不是每次调用操作时都实例化。