簡體   English   中英

在WCF服務中傳遞接口?

[英]Passing Interface in a WCF Service?

我正在嘗試使用WCF服務,並且遇到了傳遞接口的問題。

這有效:

[ServiceContract]
public interface IHomeService
{
    [OperationContract]
    string GetString();
}

但這不是:

[ServiceContract]
public interface IHomeService
{
    [OperationContract]
    IDevice GetInterface();
}

當我嘗試編譯客戶端時,它在GetInterface方法上失敗。 我得到一個異常,說它無法將Object轉換為IDevice。

在客戶端上,IHomeService類正確地使用字符串實現GetString,因為它是返回類型,但GetInterface具有返回類型的對象。 為什么不是IDevice?

您需要告訴WCF序列化程序使用哪個類來序列化接口

[ServiceKnownType(typeof(ConcreteDeviceType)]

謝謝,當我改變它時,它的工作原理如下:

[ServiceContract]
[ServiceKnownType(typeof(PhotoCamera))]
[ServiceKnownType(typeof(TemperatureSensor))]
[ServiceKnownType(typeof(DeviceBase))]
public interface IHomeService
{
    [OperationContract]
    IDevice GetInterface();
}

我也從這個網站得到了幫助: http//www.thoughtshapes.com/WCF/UsingInterfacesAsParameters.htm

我最初嘗試將接口傳遞給WCF方法,但無法使用此線程提供的答案使代碼工作。 最后,我重構了我的代碼並將抽象類傳遞給方法而不是接口。 我通過在基類上使用KnownType屬性來實現這一點,例如

[DataContract]
[KnownType(typeof(LoadTypeData))]
[KnownType(typeof(PlanReviewStatusData))]
public abstract class RefEntityData : EntityData, IRefEntityData

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM