我有一个自定义类的列表,它是mvvm模式中的Model。 我需要在DB中插入列表数据。 那么有人可以建议将此列表传递给Web服务的最佳方法是什么?
由于
答案 0 :(得分:0)
如果列表不是太大,你可以尝试序列化列表并发送它"按原样#34;。如果它太大,您可能会遇到服务的MaxReceivedMessageSize和maxBufferSize属性问题,您应该将它们设置为尽可能大。当然,我假设你有两个相同的Model(客户端和服务器)来序列化和反序列化它。
要减少发送的数据大小,可以尝试使用TCP绑定而不是HTTP。
如果它仍然太大,您可能需要对列表进行分块并通过多次调用相同的服务来发送它。
我在很多情况下也做过几次变通办法。例如,如果你只需要更新一个只改变几个字段的对象列表,我就会使用一个新的对象id +新值列表并在服务器端进行更改,而不是更改客户端中的所有内容,然后将其发送到服务器。
希望这可以帮助你; - )
答案 1 :(得分:0)
我们公开了一个发送和接收DTO的WCF服务,然后在Silverlight中创建一个服务引用。我们在Silverlight中使用EmitMapper将模型类映射到代理生成的DTO。
更新了代码示例。
服务器端的DTO课程:
public class CompanyDTO
{
public string Name
{
get;
set;
}
}
WCF服务接口:
[ServiceContract]
public interface IUpdateService
{
[OperationContract]
void InsertCompanies(List<CompanyDTO> companies);
}
WCF服务实施:
public class UpdateService : IUpdateService
{
public void InsertCompanies(List<CompanyDTO> companies)
{
// insert stuff into database
}
}
Silverlight中的模型类:
public class Company
{
public string Name
{
get;
set;
}
}
调用代理:
public MainPageViewModel()
{
var company = new Company { Name = "Amalgamated Co." };
var companyDTO = EmitMapper.ObjectMapperManager.DefaultInstance
.GetMapper<Company, UpdateServiceProxy.CompanyDTO>().Map(company);
UpdateServiceProxy.IUpdateService client = new UpdateServiceProxy.UpdateServiceClient();
client.BeginInsertCompanies(
new ObservableCollection<UpdateServiceProxy.CompanyDTO> { companyDTO }, null, null);
}