我有一個公開的函數WCF服務:WCF多態參數
Public Function FeedAnimal(ByVal animal As Animal) As Animal Implements IFarm.FeedAnimal
animal.Feed()
Return animal;
End Function
然而動物是一個抽象類,與許多派生類型,每一個都有自己的屬性。然而,當我在SOAPUI中用可能表示牛的屬性發出請求時,我得到一個錯誤,我無法創建一個抽象類。我如何讓WCF將參數反序列化爲它的實際類型?我們假設他們都可以通過其不同名稱的屬性區分開來。
我已經嘗試在任何地方添加KnownType屬性,無濟於事。這樣做可以讓我返回派生類型,但不接受它們作爲參數。
如果我想要做的是完全瘋了,請告訴我下一個最近的事情
編輯;我會滿意,如果我可以把它回落到XmlSerializer的只有這個功能,它使用在以前版本的
[ServiceContract(Namespace:=Constants.SERVICE_NAMESPACE)]
[ServiceKnownType(GetType(Cow))]
Public Interface IFarm
[OperationContract()]
[ServiceKnownType(GetType(Cow))]
[Validation(CheckAssertions:=False, SchemaValidation:=True)]
Function FeedAnimal(ByVal animal As Animal) _
As Animal
End Interface
上班,類
[KnownType(GetType(Cow))]
Public MustInherit Class Animal
Public weight As Integer
End Class
Public Class Cow
Inherits Animal
Public mooPower As Double
End Class
和請求:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:v3="mycomapnyaddresss" xmlns:foo="animalnamespace">
<soap:Header/>
<soap:Body>
<v3:FeedAnimal>
<!--Optional:-->
<v3:animal>
<!--Optional:-->
<foo:weight>100</foo:weight>
<foo:mooPower>10.0</foo:mooPower>
</v3:animal>
</v3:FeedAnimal>
我已經添加到ServiceKnownType接口本身和方法定義 – MrEff