WCF和成员方法替换

时间:2010-04-12 20:53:00

标签: wcf

我有一个形式的对象:

public class Report
{
   m_filter1;
   m_filter2;
   ...
   m_filtern;

   AddFilter1(int a)
   {
      m_filter1 = /* some logic of filtering results using the value of a */
   }

   ...
}

此外,用于使用Report类的相应静态方法:

public static List<Result> GetResults(Report r)
{
   /* use r to query the DB and return an array of results */
}

由于此方法需要使用WCF公开,我还必须使类报告可用于“外部”(客户端)使用,但其隐藏内部管道的成员方法不能在WCF代理类中使用为它生成。

由于我无法公开报告的私人成员,我如何才能优雅地解决消费方面所需的成员方法问题?

我想到了以下形式的服务合同:

public class ReportingService
{
   Report m_report = new Report();

   AddFilter1(int a)
   {
      m_report.AddFilter1(a);
   }

   ...
}

即,使用单个Report实例包装Report类的成员方法 - 但这限制了使用由服务的所有调用共享的单个非线程安全对象。

这里有什么基本的东西吗?我对WCF很新,所以我可能忽略了解决这个问题的简单模式。

谢谢, Harel的

1 个答案:

答案 0 :(得分:1)

好吧,正如您所注意到的那样--WCF 始终通过服务器 - 客户端链接传送数据 - 这绝对是有意的。 WCF处理序列化消息 - 仅限数据。想一想:WCF完全可以互操作 - 你的客户端可能是一个叫你的PHP站点 - 那些人怎么能够执行你的.NET代码?

所以基本上设计建议是:确保你的数据合同就是那样 - 纯数据,没有行为,没有方法,没有那样。

如果您需要对某个数据执行某些操作 - 为其定义服务方法!这就是整个面向服务架构的全部内容。

所以基本上:实际上没有优雅或正确的方法来实现你想要的东西 - 除了将你的方法变成运行简单数据契约的服务方法。