实例开发架构:android调用wcf service服务(注意是service服务,不是restful风格,后面再讲restful风格的调用)。
动手之前,先一个ksoap2-android,它是我们调用wcf服务的工具。在官网上下载过好几次都不能用,后来发现原来下载的不是完整的。所以大家可以到这下载http://download.csdn.net/detail/leesmn/5162649。
wcf部分(使用的是VS2012):
1、新建wcf类库odbServiceLib。定义IService,以及定义数据约定
namespace odbServiceLib
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
[ServiceContract]
public inte易做图ce IService
{
[OperationContract]
int PostDaignoseJson(string jsonStr);
[OperationContract]
string PostConsultJson(string jsonStr);
[OperationContract]
Consult GetConsult(string imei);
// TODO: 在此添加您的服务操作
}
// 使用下面示例中说明的数据约定将复合类型添加到服务操作。
// 可以将 XSD 文件添加到项目中。在生成项目后,可以通过命名空间“odbServiceLib.ContractType”直接使用其中定义的数据类型。
[DataContract]
public class Diagnose
{
[DataMember]
public string imei { get; set; }
[DataMember]
public double longitude { get; set; }
[DataMember]
public double latitude { get; set; }
[DataMember]
public string datetime { get; set; }
[DataMember]
public int type { get; set; }
[DataMember]
public string content { get; set; }
}
[DataContract]
public class Consult
{
[DataMember]
public string imei { get; set; }
[DataMember]
public double longitude { get; set; }
[DataMember]
public double latitude { get; set; }
[DataMember]
public string datetime { get; set; }
[DataMember]
public int type { get; set; }
[DataMember]
public string text { get; set; }
[DataMember]
public string imgstr { get; set; }
[DataMember]
public byte[] img1 { get; set; }
}
}
2、实现Service。在该段代码中本人用了vs自带的ado.net entity framwork作为orm操作数据库
namespace odbServiceLib
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
public class Service : IService
{
public int PostDaignoseJson(string jsonStr)
{
Diagnose d;
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
{
DataContractJsonSerializer serializer1 = new DataContractJsonSerializer(typeof(Diagnose));
d = (Diagnose)serializer1.ReadObject(ms);
}
//System.Data.Common.DbTransaction tran = null;
int i = 0;
try
{
using (carobdEntities ctx = new carobdEntities())
{
ctx.Database.Connection.Open();
//tran = ctx.Database.Connection.BeginTransaction();
StringBuilder strb = new StringBuilder();
strb.Append("create table if not EXISTS diag");
strb.Append(d.imei);
strb.Append("(id int not null auto_increment,");
strb.Append("longitude double,");
strb.Append("latitude double,");
strb.Append("datetime datetime,");
strb.Append("type int,");
strb.Append("content varchar(500),");
strb.Append("PRIMARY KEY (id) )");
if (ctx.Database.ExecuteSqlCommand(strb.ToString()) > 0)
ctx.SaveChanges();
strb.Clear();
strb.Append("insert into diag");
strb.Append(d.imei);
strb.Append("(longitude,latitude,datetime,type,content)values(");
strb.Append(d.longitude);
strb.Append(",");
strb.Append(d.latitude);
strb.Append(",'");
strb.Append(d.datetime);
strb.Append("',");