我有两个服务TestService1和TestService2。我可以从没有ServiceBehaviorAttribute属性的普通类继承这两个服务吗?像这样:
public class ServiceBase
{
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class TestService1 : ServiceBase, ITestService1
{
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class TestService2 : ServiceBase, ITestService2
{
}
ServiceBehaviorAttribute属性的行为是否会应用于继承的普通类的继承成员?
我是否要将一些服务特定的属性添加到基本普通类?
如果我在实现中出错了,如何正确实现这样的继承 - 服务从另一个普通类继承了一些行为?
更新 它不是ServiceBehaviorAttribute attribute inheritance。我问更常见的问题 - 我可以在WCF服务类中继承另一个类(在外部DLL中,例如,甚至与WCF无关)的某些功能吗?如何?我的代码是否有效且没有隐藏的细微差别?
答案 0 :(得分:1)
[ServiceBehavior]
可以应用于基类,以便派生的服务类将继承行为。
改变这个:
public class ServiceBase
{
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class TestService1 : ServiceBase, ITestService1
{
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class TestService2 : ServiceBase, ITestService2
{
}
......对此:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class ServiceBase
{
}
public class TestService1 : ServiceBase, ITestService1
{
}
public class TestService2 : ServiceBase, ITestService2
{
}
我可以在WCF服务类中继承另一个类(即在外部DLL中,甚至与WCF无关)中的某些功能吗?
当然,ServiceBase
可能有TestService1
和TestService2
可能使用的方法。但是,即使ITestService1
是公开的,WCF客户端也只会看到您的接口ITestService2
和ServiceBase.SomeMethod()
上定义的方法。
e.g。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class ServiceBase
{
// TestService1 and TestService2 may call me
// but not WCF clients. I'm invisible
public void SomeMethod () {}
}
public class TestService1 : ServiceBase, ITestService1
{
public void SomeServiceMethod1() { SomeMethod(); }
}
public class TestService2 : ServiceBase, ITestService2
{
public void SomeServiceMethod2() { SomeMethod(); }
}
关于基类与WCF无关的更新,“是的,你可以”。与调用任何其他基类没什么不同。