c# - 访问承载服务的对象

标签 c# wcf hosting duplex-channel

我在 C# 中使用 WCF 4。我使用的 InstanceContextMode 设置为 Single。实现我的契约(Contract)的类的实例是使用构造函数创建的,该构造函数接受托管服务的对象的引用。在创建和托管服务主机时传递服务对象。

服务实现代码:

[ServiceBehavior(UseSynchronizationContext = false, 
     InstanceContextMode = InstanceContextMode.Single)]   
public class ServiceImpl : IMyContract
{
   private ServiceHoster _sh;
   ServiceImpl(ServiceHoster sh)
   {
      _sh = sh;
   }

   public string Call(string input)
   {
      ... //Do some processing on the input string

      return _sh.ProcessCall(string input);
   }
}

ServiceHoster 代码:

public class ServiceHoster
{
    private ServiceImpl ns;

    ServiceHoster()
    {
       ...
       Start();
    }

    private void Start()
    {
       //Host Service
       ns = new ServiceImpl(this);

        //Instantiate NetTCP service
        _tcpServiceHost = new ServiceHost(ns, new Uri("net.tcp://localhost:8089"));
        _tcpServiceHost.Open();
    }

    private void Stop()
    {
      if(ns != null && ns.State == CommunicationState.Opened)
        ns.Close();
    }

    public string ProcessCall(string input)
    {
       ...
       return result;
    }
}

我现在面临的问题是,我们需要客户端和服务器之间的双工通信。对于双工连接,我们需要将 InstanceContextMode 设置为 PerSession

我的问题是:

  1. 我可以使用多个值吗 InstanceContextMode 一些方式(哪个 我认为不可能)?

  2. ServiceImpl有没有别的办法 获取引用的对象 托管它的对象的名称?

  3. 有什么我可以做的吗 解决问题的方式不同?

谢谢。

最佳答案

首先,我认为您不需要对 InstanceContextMode 做任何事情。有关如何保留已连接客户端列表的更多信息,请参阅此 MSDN/WCF 论坛主题:http://social.msdn.microsoft.com/forums/en-US/wcf/thread/463dd4a2-f9db-4773-b373-7dd470e65f90/

如果您仍然想这样做,我建议您实现一个实例提供程序(通过实现 IInstanceProvider 实例并将其插入具有您选择的行为的 ServiceHost。)

如果您在 Google 上搜索 IInstanceProvider,您会找到有关它如何完成的示例 - 如果您使用 IoC 容器,您很可能会找到以这种方式工作的 WCF 集成。

关于c# - 访问承载服务的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5857818/

相关文章:

c# - Access 2007 已锁定

c# - 如何使多个 SOAP Web 服务调用通用以减少冗余?

wcf - 在企业架构上的 WCF 服务中实现身份验证的最佳方法是什么?

java - 如何托管JSP页面进行免费测试

hosting - 如何在子目录中托管 Svelte 应用程序?

c# - SQLite 在其他进程中触发和引发事件

c# - MVC 发布数据并返回 json 数据

C# NHibernate 简单问题

wcf - Servicehost 抛出错误,即使添加到使用 netsh 的配置

java - 将域名指向VPS中的java应用程序