基本的WCF问题

时间:2011-09-15 20:25:31

标签: .net vb.net wcf web-services

我通常可以创建一个名为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服务。我认为它与我添加的这个类中的两个字段有关。不确定我是否需要将它们标记为特殊的。

2 个答案:

答案 0 :(得分:0)

尝试将<ServiceKnownType(GetType(GP_Item_SIM_Product))>添加到服务合同中。

答案 1 :(得分:0)

您需要将ServiceKnownType属性添加到服务合同中 - 这是定义您的服务的Interface并包含CreateSalesitem操作的签名。

<ServiceKnownType(GetType(GP_Item_SIM_Product))> 
Public Interface IWebService