2012-01-05 66 views
0

我已经定义了一个服务合同,并且操作已经实施。这是我实现的服务的一个示例:我是否正确使用WCF服务从客户端接收数据并将其存储在数据库中?

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

我没有定义数据合同。所以我不确定当远程客户端通过Android或Microsoft应用程序拨打电话时该服务是否可以正常工作。

+2

试着问一个更具体的问题。这非常含糊。 – 2012-01-05 21:26:17

+0

好吧,我试着让它更具体。如果有人能提供一些答案/建议,我将不胜感激。 – Qwerty 2012-01-05 21:44:36

+0

我想这是可以的,只要你为你的服务添加一些安全级别,这样你就不会不需要的插入到你的数据库中。 – TheBoyan 2012-01-05 21:47:47

回答

0

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

有些人喜欢总是用DataContracts,即使他们只有一个参数。这可以在您想要向操作添加参数时使生活更轻松。您只需将其添加到数据契约类中,而不是更改每个调用,再加上服务契约接口和实现它的类。这是个人喜好的问题。

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

+0

啊对了,我现在明白了,关于msdn的教程和解释对于我的wcf服务应用来说没有意义。 – Qwerty 2012-01-05 22:04:41

+0

那么我看看WCF数据服务,对我来说会更有效率和更有用吗? – Qwerty 2012-01-06 03:26:34

+0

我不确定你的意思是“WCF数据服务”。 – 2012-01-06 16:29:35

相关问题