2011-09-15 18 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 'が です。たとえば、 でKnownTypeAttribute属性を使用するか、DataContractSerializerに渡された既知の型の一覧 に追加することで、DataContractResolverを使用するか、または静的に既知の型のリストに知られていない型 を追加することを検討してください。詳細については、 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

サービス契約に<ServiceKnownType(GetType(GP_Item_SIM_Product))>を追加してみてください。

+0

ありがとうございました。私はクラス宣言にこれを追加しようとしました: '' _ _ パブリッククラスGP_Item_SIM_Product'。しかし、行かない... – user489041

0

サービス契約にServiceKnownType属性を追加する必要があります。サービス契約を定義するInterfaceであり、CreateSalesitem操作の署名が含まれています。

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