[英]How to pass Interface as parameter in WCF service?
我有以下但是我不確定這是正確的做法。
namespace WCFServices
{
[ServiceContract(Name = "IService")]
[ServiceKnownTypeAttribute(typeof(DataItem))]
public interface IService
{
[OperationContract]
void InstantiateThirdParties(string name, IEnumerable<IDataItem> data, IEnumerable<string> modules, IEnumerable<string> states);
}
}
這是使用該接口的代碼。
namespace WCFServices
{
public class Service : IService
{
public void InstantiateThirdParties(string name, IEnumerable<IDataItem> data, IEnumerable<string> modules, IEnumerable<string> states)
{
Process.ExecuteAll(name, data, modules, states);
}
}
}
而我目前唯一的對象類型如下。
namespace DataObjects
{
[Serializable]
[DataContract]
public class DataItem : IDataItem
{
public DataItem();
[DataMember]
public CustomerInfo customer { get; set; }
[DataMember]
public LoanInfo loan { get; set; }
[DataMember]
public DateTime loanProcessingDate { get; set; }
[DataMember]
public string moduleID { get; set; }
[DataMember]
public string processingState { get; set; }
}
}
我朝着正確的方向前進了嗎?
您需要使用KnownTypeAttribute而不是ServiceKnownTypeAttribute。
如果有問題的接口是您在IEnumerable<IDataItem>
參數中使用的IDataItem
,那么您需要將接口本身標記為已知類型:
[KnownTypeAttribute(typeof(IDataItem))]
查看此博客: http : //blogs.msdn.com/b/domgreen/archive/2009/04/13/wcf-using-interfaces-in-method-signatures.aspx
編輯:應該是KnownTypeAttribute而不是Papado正確指出的ServiceKnownTypeAttribute。
編輯2:
namespace WCFServices
{
[ServiceContract(Name = "IService")]
[ServiceKnownTypeAttribute(typeof(DataItem))]
public interface IService
{
[OperationContract]
void InstantiateThirdParties(string name, IEnumerable<IDataItem> data, IEnumerable<string> modules, IEnumerable<string> states);
}
}
namespace DataObjects
{
[DataContract]
[KnownType(typeof(IDataItem))]
public class DataItem : IDataItem
{
...
}
}
你的意思是以下嗎?
namespace WCFServices
{
[ServiceContract(Name = "IService")]
[KnownTypeAttribute(typeof(DataItem))]
public interface IService
{
[OperationContract]
void InstantiateThirdParties(string name, IEnumerable<IDataItem> data, IEnumerable<string> modules, IEnumerable<string> states);
}
}
我的對象仍然看起來像這樣。
namespace DataObjects
{
[DataContract]
[Serializable] <------ Not having this was my problem
[KnownType(typeof(IDataItem))]
public class DataItem : IDataItem
{
public DataItem();
[DataMember]
public CustomerInfo customer { get; set; }
[DataMember]
public LoanInfo loan { get; set; }
[DataMember]
public DateTime loanProcessingDate { get; set; }
[DataMember]
public string moduleID { get; set; }
[DataMember]
public string processingState { get; set; }
}
}
這是我的界面
namespace Interfaces
{
public interface IDataItem
{
CustomerInfo customer { get; set; }
LoanInfo loan { get; set; }
DateTime loanProcessingDate { get; set; }
string moduleID { get; set; }
string processingState { get; set; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.