所以我通过 WCF 发送实体。我想做的是有机会在它们过去之前以任何我想要的方式改变实体。我不必在 WCF 中执行此操作,但我没有看到其他地方可以执行此操作,因为我希望在一个地方执行此操作。
如果有人有其他方法可以接受建议:)
我有通常的 DAL、域和服务层。他们也都有一个共同点。
我认为您在谈论消息检查器
消息检查器是一个可扩展性对象,可以在服务模型的客户端运行时中使用,并以编程方式或通过配置调度运行时,并且可以在收到消息之后或发送消息之前检查和更改消息。
此示例实现了一个基本的客户端和服务消息验证机制,该机制根据一组可配置的 XML Schema 文档验证传入消息。请注意,此示例不会验证每个操作的消息。这是有意的简化。
还可以查看IParameterInspector,在这里您可以处理客户端和服务器端的所有输入/输出参数
我不确定我是否正确理解了您的要求,但我会试一试。
我认为您可能正在寻找数据传输对象(DTO)。您可以在将实体的所有所需数据发送到服务之前将其放入 DTO。然后,该服务会处理包含的数据并将另一个 DTO 发送回您的客户端。
这样,您就可以完全控制 DTO 的结构以及您的服务和客户端真正需要的数据类型。
扩展 Jen H 的答案:
无需检查消息并处理反序列化
已序列化结果的开销,您只需在从数据库中检索结果并将结果返回给客户端之前执行自定义逻辑即可。一种方法如下所示
public interface IDataTransferObject
{
void CustomizeMeSomehow();
}
[DataContract]
public class MyDataTransferObject : IDataTransferObject
{
public void CustomizeMeSomehow()
{
//Your custom logic here..
}
}
public class MyService
{
public List<MyDataTransferObject> GetObjects()
{
List<MyDataTransferObjects> items = Repository.RetrieveResults();
foreach (var item in items)
item.CustomizeMeSomehow();
return items;
}
}