2011-09-15 44 views
0

我通常可以創建一個名爲SalesItem的類實例,並將其作爲參數傳遞給Web服務,如webService.CreateSalesitem(New SalesItem())這很好。基本的WCF問題

然後,我將我的SalesItem類分類。我叫它GP_Item_SIM_Product。但是,當我嘗試將此類作爲參數傳遞給我的Web服務時,我得到一個異常。 webService.CreateSalesitem(new GP_Item_SIM_Product()

這裏是個例外:

而試圖序列參數 http://schemas.microsoft.com/dynamics/gp/2010/01:salesItem時出錯。 InnerException消息'數據'類型'IMS.GP_Item_SIM_Product' 合同名稱 'GP_Item_SIM_Product:http://schemas.datacontract.org/2004/07/IMS'爲 不是預期的。考慮使用DataContractResolver或將未知的任何類型 靜態添加到已知類型的列表中 - 例如,使用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

嘗試將<ServiceKnownType(GetType(GP_Item_SIM_Product))>添加到您的服務合同中。

+0

謝謝。我嘗試將它添加到類聲明中: _ _ Public Class GP_Item_SIM_Product'。但是沒有... – user489041

0

您需要的ServiceKnownType屬性添加到服務合同 - 這是定義你的serivce幷包含CreateSalesitem操作簽名Interface

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