【发布时间】:2013-09-03 22:52:19
【问题描述】:
我正在尝试编写两种完全不同类型的服务合同,这里有一个 (IService) 应该支持多个客户端。
[ServiceContract(CallbackContract = typeof(IClientCallBack), SessionMode = SessionMode.Required)]
public interface IService
{
[OperationContract]
void GetSquaredAsync();
}
public interface IClientCallBack
{
[OperationContract(IsOneWay = true)]
void Result(int i);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
class Service : IService
{
void GetSquaredAsync(double x)
{
callback = OperationContext.Current.GetCallbackChannel<IClientCallBack>();
callback.Result(x * x);
}
这是另一个只允许 1 个客户端的情况:
[ServiceContract(SessionMode = SessionMode.Required)]
public interface ISuperUser
{
[OperationContract]
string WhoIsSpecial(string name);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class SuperUser : ISuperUser
{
public string WhoIsSpecial(string name)
{
return String.Format("{0} is special ^_^", name);
}
}
这只是一个示例,因为我的实际 ServiceContracts 与实现太大而无法在此处发布,但想法是相同的。我希望一个 ServiceContract 检查服务,只有几个可用的函数调用和一个不同的 ServiceContract,它使用回调并授予对由于同步问题而在任何给定时间我希望只有 1 个客户端可以访问的功能的访问权限。我可以让一个服务主机同时支持这两个 ServiceContracts 吗?
【问题讨论】:
-
是的,您可以有两个(或更多)合同由一项服务提供 - 您只需将所有合同写入配置
-
感谢您的帮助,但我不确定我是否理解您的意思。你能指点我一个可以证明这一点的 appconfig 吗?