我在OperationContract中使用interface作为输入参数。但是当我在客户端生成代理类时。我无法访问实现ITransaction接口的接口或类的成员。我只是geeting是对象
服务接口
[ServiceContract]
public interface IServiceInterface
{
[OperationContract]
string SyncDatabase(ITransaction TransactionObject);
}
服务类
class SyncService:IServiceInterface
{
public string SyncDatabase(ITransaction TransactionObject)
{
return "Hello There!!";
}
}
接口
public interface ITransaction
{
ExpenseData ExpData { get; set; }
void Add(ITransaction transactionObject);
}
数据合同
[DataContract]
public class Transaction:ITransaction
{
[DataMember]
public ExpenseData ExpData
{
get;
set;
}
public void Add(ITransaction transactionObject)
{
}
}
在上述情况下,我还应该复制客户端上的iTransaction类和接口
答案 0 :(得分:6)
实际上,您需要让ServiceContract知道您作为参数传递的接口的实现,因此WCF会将其包含在WSDL中。
这应该有效:
[ServiceContract]
[ServiceKnownType(typeof(Transaction))]
public interface IServiceInterface
{
[OperationContract]
string SyncDatabase(ITransaction TransactionObject);
}
答案 1 :(得分:2)
使用[KnownType(typeof(testClass))]
。
请参阅以下链接:
答案 2 :(得分:0)
尝试将您的界面设为[DataContract]
并使用[KnownType]
属性告诉WCF该界面的已知实现是什么。
[DataContract]
[KnownType(typeof(Transaction))]
public interface ITransaction
{
[DataMember]
ExpenseData ExpData { get; set; }
void Add(ITransaction transactionObject);
}