7

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

  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)
        {
    
        }
    
     }
    

在上述情况下,我还应该在客户端复制 iTransaction 类和接口吗

4

3 回答 3

6

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

这应该有效:

[ServiceContract]
[ServiceKnownType(typeof(Transaction))]
public interface IServiceInterface
{
     [OperationContract]
     string SyncDatabase(ITransaction TransactionObject);
}
于 2015-01-20T14:55:38.147 回答
2

使用[KnownType(typeof(testClass))].

参考这些链接:

于 2012-07-05T13:21:50.130 回答
0

尝试使您的接口成为[DataContract]并使用该[KnownType]属性来告诉 WCF 该接口的已知实现是什么。

[DataContract]
[KnownType(typeof(Transaction))]
public interface ITransaction
{
    [DataMember]
    ExpenseData ExpData { get; set; }
    void Add(ITransaction transactionObject);
}
于 2012-07-05T16:15:54.297 回答