我在OperationContract中使用interface作为输入参数.但是当我在客户端生成代理类时.我无法访问实现ITransaction接口的接口或类的成员.我只是geeting是对象
服务接口
[ServiceContract]
public interface IServiceInterface
{
[OperationContract]
string SyncDatabase(ITransaction TransactionObject);
}
Run Code Online (Sandbox Code Playgroud)服务类
class SyncService:IServiceInterface
{
public string SyncDatabase(ITransaction TransactionObject)
{
return "Hello There!!";
}
}
Run Code Online (Sandbox Code Playgroud)接口
public interface ITransaction
{
ExpenseData ExpData { get; set; }
void Add(ITransaction transactionObject);
}
Run Code Online (Sandbox Code Playgroud)数据合同
[DataContract]
public class Transaction:ITransaction
{
[DataMember]
public ExpenseData ExpData
{
get;
set;
}
public void Add(ITransaction transactionObject)
{
}
}
Run Code Online (Sandbox Code Playgroud)在上面的情况下,我还应该在客户端上复制iTransaction类和接口
小智 6
实际上,您需要让ServiceContract知道您作为参数传递的接口的实现,因此WCF会将其包含在WSDL中.
这应该工作:
[ServiceContract]
[ServiceKnownType(typeof(Transaction))]
public interface IServiceInterface
{
[OperationContract]
string SyncDatabase(ITransaction TransactionObject);
}
Run Code Online (Sandbox Code Playgroud)
尝试使您的接口成为[DataContract]并使用该[KnownType]属性告诉 WCF 该接口的已知实现是什么。
[DataContract]
[KnownType(typeof(Transaction))]
public interface ITransaction
{
[DataMember]
ExpenseData ExpData { get; set; }
void Add(ITransaction transactionObject);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4937 次 |
| 最近记录: |