我使用WCF服务,并想知道我是否可以为调用者和服务使用OperationContract方法。 因此,我想知道如果代码在应用程序或服务中运行的最佳方式。检查你是否在wcf服务
像这样:
[ServiceContract]
public interface IService
{
[OperationContract]
bool ServiceMethod(string param);
}
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single,
InstanceContextMode = InstanceContextMode.Single, UseSynchronizationContext=false)]
public class Service : IService
{
bool ServiceMethod(string param)
{
if(!isInWcfService) //How to do this?
{
//Call this ServiceMethod in WCF Service
}
else
{
//Do the work
}
}
}
由于调用程序和服务都知道这个类,我认为,如果双方只需要调用这个方法可能更容易,并决定自己是否有转发致电该服务,或者只是可以工作。
谢谢!
我不知道你建议是好想法。你需要不同的行为,具体取决于调用者是否是WCF服务?如果是这样,我会建议创建两种方法来分离你的逻辑。有一种可能有不同副作用的方法通常是不好的设计选择。 – timothyclifford
好吧,通常该方法仍然有一件事,就是如果调用者不是wcf服务,该方法首先调用服务,然后进行预期的工作。 我的想法背后是,如果他只需要用自己的名字称呼这一个方法,而不必看看哪个是他的,哪个是服务的,那么该组合对于其他人更容易使用。 另一个想法是使这些类内部和两个友好的程序集可见,其中一个是服务,另一个是应用程序的程序集。你对此有何看法? – Michael
我同意@timothyclifford。 但是,您可以使用一些变通方法来识别您的方法的调用者。 其中之一是添加一个自定义标题,所以如果任何来自WCF的客户添加这个标题,它可以很容易地识别。 这个例子可以帮助你:http://stackoverflow.com/a/3277754 –