【问题标题】:how to create multiple endpoint by coding?如何通过编码创建多个端点?
【发布时间】:2013-04-05 09:43:46
【问题描述】:

endpoint 是在 app.config 中创建的,如下所示,但是如何创建多个不同地址的端点呢?

app.config:

 <service name="PokerService.PlayerService" behaviorConfiguration="ServiceBehaviorPlayer">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:5054" />
      </baseAddresses>
    </host>
    <!-- Service Endpoints -->
    <endpoint address="player" binding="netTcpBinding" bindingConfiguration="PlayerBinding" contract="PokerService.IPlayerService" />
    <endpoint address="player/mex" binding="mexTcpBinding" name="ServiceBehaviorPlayer" contract="IMetadataExchange" />
  </service>
</services>

但是我怎样才能生成这样的Tcp//localhost/player/1 ( 1-1000)。有人知道吗?

【问题讨论】:

  • 我不完全理解你的问题。是什么不工作?
  • 我如何通过编码生成像“Tcp//localhost/player/1”到“Tcp//localhost/player/1000”这样的端点并在app.config中更新?
  • 您需要 1000 个端点?!
  • 我需要动态生成从 1 到至少 10 的端点地址。
  • 我假设您为多个玩家设计了一项服务?因此,您不需要每个播放器都有一个端点。这将是一个糟糕的设计。您应该在您的服务中实现播放器管理,并为每个连接使用单个实例服务或一个实例。使用相应的服务类属性来实现这一点。

标签: c# wcf c#-4.0


【解决方案1】:

这将在主机上创建 1000 个端点。

var host = new ServiceHost(typeof(PokerService.PlayerService));
 for(int i = 1; i <= 1000; i++)
 {
   host.AddServiceEndpoint(typeof(PokerService.IPlayerService), 
                                  new NetTcpBinding(),
                                  @"net.tcp://localhost:5054/player/"+i);
 }
 host.Open();

编辑

我同意@JanW - 这个方法是 ludacris - 正如@JanW 所说,您应该让 ServiceHost 处理并发,方法是在您的实现中配置 ServiceBehavior。

但是,要获取托管端点的完整列表,请执行以下操作:

foreach (var e in host.Description.Endpoints)
{
    Console.WriteLine(e.Address);
}

【讨论】:

  • 我需要在一台服务器上为游戏创建多个实例。这就是我需要多个端点,例如“net.tcp://localhost:5054/player/1”到“net.tcp:// localhost:5054/player/10"。现在我想知道新端点保存在哪里以及如何返回?
猜你喜欢
  • 1970-01-01
  • 2020-05-07
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多