WCF接口作为参数

时间:2012-07-05 12:44:27

标签: wcf

我在OperationContract中使用interface作为输入参数。但是当我在客户端生成代理类时。我无法访问实现ITransaction接口的接口或类的成员。我只是geeting是对象

  1. 服务接口

    [ServiceContract]
    public interface IServiceInterface
    {
    [OperationContract]
    string SyncDatabase(ITransaction TransactionObject);
    }
    
  2. 服务类

    class SyncService:IServiceInterface
    {
    
        public string SyncDatabase(ITransaction TransactionObject)
        {
        return "Hello There!!";    
        }
    }
    
  3. 接口

    public interface ITransaction
    {
        ExpenseData ExpData { get; set; }
        void Add(ITransaction transactionObject);
    }
    
  4. 数据合同

    [DataContract]
    public class Transaction:ITransaction
    {
        [DataMember]
        public ExpenseData ExpData
        {
            get;
            set;
        }
    
        public void Add(ITransaction transactionObject)
        {
    
        }
    
     }
    
  5. 在上述情况下,我还应该复制客户端上的iTransaction类和接口

3 个答案:

答案 0 :(得分:6)

实际上,您需要让ServiceContract知道您作为参数传递的接口的实现,因此WCF会将其包含在WSDL中。

这应该有效:

[ServiceContract]
[ServiceKnownType(typeof(Transaction))]
public interface IServiceInterface
{
     [OperationContract]
     string SyncDatabase(ITransaction TransactionObject);
}

答案 1 :(得分:2)

答案 2 :(得分:0)

尝试将您的界面设为[DataContract]并使用[KnownType]属性告诉WCF该界面的已知实现是什么。

[DataContract]
[KnownType(typeof(Transaction))]
public interface ITransaction
{
    [DataMember]
    ExpenseData ExpData { get; set; }
    void Add(ITransaction transactionObject);
}