You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET6中集成NetTcp会话服务并保留其他服务功能?

解决方案:同时启用NetTcp、BasicHttp与元数据端点

这一需求完全可行,核心是确保各服务的绑定配置相互独立,且元数据发布规则覆盖所有端点类型,具体操作如下:

1. 修正服务契约的会话标记

需要会话的服务契约必须明确指定会话模式,且操作契约需标记会话生命周期控制属性,避免影响其他无会话服务:

[ServiceContract(SessionMode = SessionMode.Required)]
public interface ISessionfulNetTcpService
{
    [OperationContract(IsInitiating = true)]
    void StartSession();

    [OperationContract(IsTerminating = true)]
    void EndSession();
}

2. 独立配置多服务终结点

在Program.cs中分别为不同服务配置对应绑定,确保每个服务的绑定规则互不干扰:

builder.Services.AddServiceModelServices()
    .AddServiceModelMetadata()
    .AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>();

var app = builder.Build();

app.UseServiceModel(serviceBuilder =>
{
    // 配置BasicHttp无会话服务
    serviceBuilder.AddService<BasicHttpService>()
                  .AddServiceEndpoint<BasicHttpService, IBasicHttpService>(
                      new BasicHttpBinding(), "/BasicHttpService");

    // 配置带会话的NetTcp服务
    var netTcpBinding = new NetTcpBinding(SecurityMode.None);
    netTcpBinding.SessionMode = SessionMode.Required;
    serviceBuilder.AddService<SessionfulNetTcpService>()
                  .AddServiceEndpoint<SessionfulNetTcpService, ISessionfulNetTcpService>(
                      netTcpBinding, "/SessionfulNetTcpService");

    // 配置元数据端点(暴露所有服务的元数据)
    var mexBinding = MetadataExchangeBindings.CreateMexHttpBinding();
    serviceBuilder.AddServiceEndpoint<IMetadataExchange>(mexBinding, "/mex");
});

3. 验证元数据与端口配置

  • 确保UseRequestHeadersForMetadataAddressBehavior已注册,让元数据端点能正确返回所有服务的终结点信息,包括NetTcp类型。
  • 检查NetTcp默认端口(808)是否被占用,防火墙是否允许该端口的TCP流量。
  • 所有服务的终结点地址路径需保持唯一,避免路由冲突。

关键注意事项

不同服务的绑定配置是完全独立的,只要各自的会话/无会话规则匹配契约定义,就不会互相影响。元数据端点只需单独配置一次,即可覆盖所有类型的服务终结点。

内容的提问来源于stack exchange,提问作者monty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:22:08