![](/img/trans.png)
[英]Calling a WCF service with certificate from a client application without having the contract interface
[英]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);
}
}
您正在將服務合同和數據合同混合在一起。 您只需要使用DataContract
和DataMember
屬性即可創建數據協定,甚至不需要。
但是,當您使用此數據協定從服務生成服務引用時,並且要向其中添加服務引用的項目沒有對定義了AmountSpecification
的程序集的引用,它將僅與給定名稱和屬性。
如果要使用該類的高級類,則必須引用在客戶端應用程序中定義該類的程序集,並在服務引用配置中選中“在引用的程序集中重用類型”。 請參閱服務參考復雜類型 。
您的方法返回IOrderSpecification。
因此,在客戶端,沒有關於使用哪種實現的指示(AmountSpecification,AndSpecification等),因此客戶端將不會創建正確的實例類型。
您需要在界面上添加“熟知類型”屬性 。 這將使wsdl包含實現的定義,因此客戶機將獲得該信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.