【发布时间】:2016-01-10 07:01:47
【问题描述】:
为什么我们可以将 [OperationContract] 属性放在 wcf 服务中的私有方法上。从我开始编程的那一天开始,我就被教导私有方法是那些在课堂外无法访问的方法。现在在 WCF 服务中,您可以公开公开私有方法。
[ServiceContract]
public class MyServices
{
[OperationContract]
private int add(int a,int b)
{
return a + b;
}
}
【问题讨论】:
-
你可以用这个属性来标记你的方法,但是它对服务客户端是不可见的。
-
您确认实际上可以通过 WCF 调用吗? (可能是——我没试过。)基本上没有办法说“这个属性只能应用于公共成员”。
-
@JohnSaunders 是的,完全正确。我刚刚创建了新的 WCF 服务项目,删除了 IService1 接口并将所有合同属性移动到类定义中。然后我添加了新的私有方法并用 OperationContract 标记它。然后我创建了新的控制台应用程序,添加了对我的 WCF 服务的服务引用,私有方法也被发现并添加到客户端。我成功地从控制台应用程序调用了私有方法。 WCF 服务托管在本地 IIS Express 上。
-
嗯,问题可能不是你为什么可以这样做,而是你为什么会。你是程序员,只是不要在你的私有方法上使用该属性。
-
除了Patrick 所说的,您应该使用服务契约interfaces 并将属性放在接口方法上。创建没有接口的服务会迫使您使用服务引用,它们有自己的问题