我有一个自定义类的列表,它是 mvvm 模式中的模型。我需要在 DB 中插入列表数据。那么任何人都可以建议将此列表传递给网络服务的最佳方式是什么?
谢谢
我有一个自定义类的列表,它是 mvvm 模式中的模型。我需要在 DB 中插入列表数据。那么任何人都可以建议将此列表传递给网络服务的最佳方式是什么?
谢谢
如果列表不是太大,您可以尝试将列表序列化并“按原样”发送。如果它太大,您的服务的 MaxReceivedMessageSize 和 maxBufferSize 属性可能会出现问题,您应该将它们设置得尽可能大。当然,我假设您在双方(客户端和服务器)都有相同的模型来序列化和反序列化它。
要减少您发送的数据大小,您可以尝试使用 TCP 绑定而不是 HTTP。
如果它仍然太大,您可能必须将列表分块并通过多次调用相同的服务来发送它。
在许多情况下,我也做了几种解决方法。例如,如果您只需要更新仅更改几个字段的对象列表,我会使用创建一个新的 object-id + 新值列表并在服务器端进行更改,而不是更改客户端中的所有内容,然后将其发送到服务器。
希望这可以帮助你;-)
我们公开一个发送和接收 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);
}