0

我有一个连接到多个客户端的 WCF 服务。服务配置如下:

ServiceBehavior(
        InstanceContextMode = InstanceContextMode.Single,
        UseSynchronizationContext = false,
        ...

在我使用的服务中,使用 OperationContext.Current.SessionId 识别客户端。

public void Register()
{
        Debug.WriteLine(OperationContext.Current.SessionId);
}

想象一下以下场景: - Client1 调用 Register - 服务在 Thread1 中运行 Register - 在一段时间后 Client2 调用 Register - 服务也在 Thread1 中运行 Register(理论上是可能的,不是吗?)

知道 OperationContext.Current 是 ThreadStatic,显示第二个调用的内容:

  • 会话 1,因为 OperationContext.Current 已在第一次调用中设置
  • 还是第 2 节 ..?

先感谢您 ...

4

1 回答 1

0

您将获得 Session2。会话和实例化在 WCF 中是两个不同的东西。我建议您阅读以下 2 个博客条目,它们将帮助您理解 WCF 会话和实例化的概念。

http://www.dotnetconsult.co.uk/weblog2/PermaLink,guid,af6e6325-2e30-42e3-acb9-57e1363fa51e.aspx

http://www.dotnetconsult.co.uk/weblog2/PermaLink,guid,1efac821-2b89-47bb-9d27-48f0d6347914.aspx

您也可以使用客户端对此进行测试。我更改了您的 WCF 方法以返回 sessionID 并在客户端中使用它。

static void Main(string[] args)
{
      ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
      Console.WriteLine(client.Regster());
      Console.ReadLine();
      client.Close();
}
于 2013-01-08T20:33:10.240 回答