WCF服务方法参数数据绑定

时间:2012-10-12 15:13:02

标签: winforms wcf data-binding

我正在将一个Windows窗体应用程序与UI层中的所有逻辑转换为一个2层应用程序,使用WCF作为应用程序/业务逻辑。我们遵循一种模式,其中服务上的每个方法都接受一个参数,并返回一个响应对象。所有必需的数据都封装在这些对象中。例如:

public GetPersonResponse GetPerson(GetPersonRequest req){
    // do stuff
}

public class GetPersonRequest{
    String Name{get;set;}
    Date BirthDate{get;set;}
}

public class GetPersonResponse{
    Person Result {get;set;}
}

我的问题是在客户端的数据绑定中。当我转到数据源和显示数据源时,我会看到响应及其中使用的实体,但不会看到请求。在上面的例子中,我会看到GetPersonResponse和Person,但不会看到GetPersonRequest。能够将请求对象绑定到表单并使用一行代码提交整个操作非常方便:

client.GetPerson((GetPersonRequest) getPersonRequestBindingSource.Current);

或至少:

GetPersonRequest req = (GetPersonRequest) getPersonRequestBindingSource.Current;
Validate(req);
client.GetPerson(req);

再举一个例子,设想一个CreatePerson方法,使用以下Request类:

public class CreatePersonRequest{
    String Name {get;set;}
    String Address {get;set;}
    String Address2 {get;set;}
    String City {get;set;}
    String State {get;set;}
    String ZipCode {get;set;}
    Integer Age {get;set;}
    // more stuff here
}

我不想要代码如下:

CreatePersonRequest req = new CreatePersonRequest(){
    Name = NameTextBox.Text,
    Address = AddressTextBox.Text,
    Address2 = Address2TextBox.Text,
    City = CityTextBox.Text,
    State = StateComboBox.SelectedValue,
    ZipCode = ZipCodeTextBox.Text,
    Age = Integer.ParseInt(AgeTextBox.Text)
}
client.CreatePerson(req);

我更愿意拥有:

client.CreatePerson((CreatePersonRequest) createPersonRequestBindingSource.Current)

恕我直言,这更加清晰和易于维护 - 如果某个字段被添加到请求中,我只需更新UI上的小部件,代码本身就不必更改。

有没有办法在UI数据绑定中获取数据源识别的请求?

.Net 4.0在客户端和服务器上。

(所有代码都是手写的,所以请不要指望它能够运行:))

编辑:要清楚,请求对象显示在合同中;我可以在后面的代码中创建一个并手动填充它。只是寻找提高生产力的数据绑定功能。

1 个答案:

答案 0 :(得分:0)

嗯,我想我已经明白了。如果添加新数据源,则仍会显示对象,然后选择对象。它们位于服务的命名空间中。

让服务选项给我所需的一切仍然很好,但唉 - 如果编程很容易,每个人都会这样做。