我通常可以创建一个名为SalesItem
的类的实例,并将其作为参数传递给Web服务,如webService.CreateSalesitem(New SalesItem())
这样可以正常工作。
然后我继承了SalesItem
类。我叫它GP_Item_SIM_Product
。但是,当我尝试将此类作为参数传递给我的Web服务时,我得到一个例外。 webService.CreateSalesitem(new GP_Item_SIM_Product()
)
以下是例外:
尝试序列化参数时出错 http://schemas.microsoft.com/dynamics/gp/2010/01:salesItem。该 InnerException消息是'Type'IMP.GP_Item_SIM_Product'与数据 合同名称 'GP_Item_SIM_Product:http://schemas.datacontract.org/2004/07/IMS'是 没想到。考虑使用DataContractResolver或添加任何类型 静态地知道已知类型的列表 - 例如,by 使用KnownTypeAttribute属性或将它们添加到列表中 传递给DataContractSerializer的已知类型。'。请参阅 InnerException以获取更多详细信息。
这是我的子类:
Imports System.ServiceModel
Imports GP_1.DynamicsGPClient
Imports GP_1.Microsoft.Dynamics.GP
Imports GP_1.Microsoft.Dynamics.Common
Imports SierraLib
Imports GP_1.GP
Imports GP_1
Imports System.Runtime.Serialization
< DataContract() > _
Public Class GP_Item_SIM_Product
Inherits SalesItem
Dim SIMProduct As Products
Dim greatPlainsRunner As GPRunner
Public Sub New(ByVal gpr As GPRunner, ByVal product As Products)
SIMProduct = product
greatPlainsRunner = gpr
SetValues()
End Sub
Private Sub SetValues()
Me.Key = New ItemKey() With {.Id = SIMProduct.MFGPN}
Me.Description = Description
Me.CurrentCost = New MoneyAmount() With {.Currency = Defaults.usCurrency, .Value = CDec(SIMProduct.Cost)}
Me.StandardCost = New MoneyAmount() With {.Currency = Defaults.usCurrency, .Value = CDec(SIMProduct.Price)}
Me.IsDiscontinued = Not SIMProduct.Enabled
Me.SalesTaxBasis = IIf(CBool(SIMProduct.Taxed = True),
GP_1.Microsoft.Dynamics.GP.SalesTaxBasis.Taxable,
GP_1.Microsoft.Dynamics.GP.SalesTaxBasis.Nontaxable)
End Sub
End Class
任何想法如何修改我的类,以便它可以发送到Web服务。我认为它与我添加的这个类中的两个字段有关。不确定我是否需要将它们标记为特殊的。
答案 0 :(得分:0)
尝试将<ServiceKnownType(GetType(GP_Item_SIM_Product))>
添加到服务合同中。
答案 1 :(得分:0)
您需要将ServiceKnownType
属性添加到服务合同中 - 这是定义您的服务的Interface
并包含CreateSalesitem
操作的签名。
<ServiceKnownType(GetType(GP_Item_SIM_Product))>
Public Interface IWebService