簡體   English   中英

WCF服務合同; 從客戶端調用類方法

[英]WCF service contract; calling a class method from client

使用WCF服務時,我遇到了以下問題:從客戶端(簡單的控制台應用程序)調用服務,即使此方法已標記為[OperationContract, ](實際上,到目前為止,我已經嘗試了所有可能的屬性組合:D)。 有辦法解決嗎? 我想這里缺少一些要點,但仍然無法解決,需要您的幫助^^這是一個類的代碼:

[ServiceContract]
[DataContract]
public class AmountSpecification : IOrderSpecification
{
    [DataMember]
    public int Amount {get ; set;}

    public AmountSpecification(int amount)
    {
        Amount = amount;
    }
    public bool IsSatisfiedBy(Order o)
    {
        return o.Amount >= Amount;
    }

    [OperationContract]
    public IOrderSpecification And(IOrderSpecification specification)
    {
        return new AndSpecification(this, specification);
    }

}

您正在將服務合同和數據合同混合在一起。 您只需要使用DataContractDataMember屬性即可創建數據協定,甚至不需要。

但是,當您使用此數據協定從服務生成服務引用時,並且要向其中添加服務引用的項目沒有對定義了AmountSpecification的程序集的引用,它將僅與給定名稱和屬性。

如果要使用該類的高級類,則必須引用在客戶端應用程序中定義該類的程序集,並在服務引用配置中選中“在引用的程序集中重用類型”。 請參閱服務參考復雜類型

您的方法返回IOrderSpecification。

因此,在客戶端,沒有關於使用哪種實現的指示(AmountSpecification,AndSpecification等),因此客戶端將不會創建正確的實例類型。

您需要在界面上添加“熟知類型”屬性 這將使wsdl包含實現的定義,因此客戶機將獲得該信息。

暫無
暫無

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

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