【发布时间】:2014-10-07 12:01:00
【问题描述】:
我在 VS2012 中使用 VB.net 和 .net framework 4.0
我有 4 个项目:
- DataAccessTier(包含数据集定义)
- DataEntityTier(数据集的强类型表适配器)
- DataService(公开合同的 WCF 服务)
- 客户端(使用生成的代理类来消费服务)
我在服务中定义合同
Function SetCustomers(data As CustomersDataTable) As Integer Implements IService.SetCustomers
Using a = New CustomersTableAdapter
SetCustomers = a.Update(data)
End Using
End Function
Function SetOrders(data As OrdersDataTable) As OrdersDataTable Implements Service.SetOrders
Using a = New OrdersTableAdapter
a.Update(data)
End Using
Return data
End Function
Public Function GetOrders() As OrdersDataTable Implements IService.GetOrders
Return (New OrdersTableAdapter).GetData()
End Function
Datatables 和 Tableadapters 对象是指 DataEntityTier 程序集。所有 Data* 项目都有 IData 命名空间。
好的,然后我在客户端中添加对服务的引用,使用重用类型。生成代理类,结果如下:
<System.ServiceModel.OperationContractAttribute(Action:="http://tempuri.org/IService/SetCustomers", ReplyAction:="http://tempuri.org/IService/SetCustomersResponse")> _
Function SetCustomers(ByVal data As IData.DS.CustomersDataTable) As Integer
<System.ServiceModel.OperationContractAttribute(Action:="http://tempuri.org/IService/GetOrders", ReplyAction:="http://tempuri.org/IService/GetOrdersResponse")> _
Function GetOrders() As IData.DS.OrdersDataTable
<System.ServiceModel.OperationContractAttribute(Action:="http://tempuri.org/IService/SetOrders", ReplyAction:="http://tempuri.org/IService/SetOrdersResponse")> _
Function SetOrders(ByVal data As IData.DS.CustomersDataTable) As IData.DS.OrdersDataTable
SetOrders(数据 As IData.DS.CustomersDataTable)一切正常! 这个问题存在于我使用类型化数据表作为参数的每种方法中,代理始终使用客户数据表。
但是当我从合同中返回它时,它会像在 GetOrders 函数中一样正确序列化。
如果我手动更正代理类,它可以正常工作,但是当我更新服务引用时,我会丢失更改。
PS。如果我删除重用类型,每个函数都会返回一个对象 xxxResponse(es GetOrdersResponse),但我不知道如何使用它:S
【问题讨论】:
标签: vb.net wcf proxy datatables type-mismatch