将(MVVM)Model类列表传递给Web服务的最佳实践是什么?

时间:2012-08-24 09:44:54

标签: silverlight web-services mvvm

我有一个自定义类的列表,它是mvvm模式中的Model。 我需要在DB中插入列表数据。 那么有人可以建议将此列表传递给Web服务的最佳方法是什么?

由于

2 个答案:

答案 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);
}

Emit Mapper is available here

相关问题