我有一个形式的对象:
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的
答案 0 :(得分:1)
好吧,正如您所注意到的那样--WCF 仅始终通过服务器 - 客户端链接传送数据 - 这绝对是有意的。 WCF处理序列化消息 - 仅限数据。想一想:WCF完全可以互操作 - 你的客户端可能是一个叫你的PHP站点 - 那些人怎么能够执行你的.NET代码?
所以基本上设计建议是:确保你的数据合同就是那样 - 纯数据,没有行为,没有方法,没有那样。
如果您需要对某个数据执行某些操作 - 为其定义服务方法!这就是整个面向服务架构的全部内容。
所以基本上:实际上没有优雅或正确的方法来实现你想要的东西 - 除了将你的方法变成运行简单数据契约的服务方法。