【发布时间】:2021-06-16 20:23:34
【问题描述】:
我正在将此服务主机(通过 TCP,非 Web)从 .NET Framework 4.8 移植到 .NET Core 3.1:
using (this._host = new ServiceHost(_receiver, new Uri("net.tcp://localhost:8065")))
{
this._host.OpenTimeout = TimeSpan.FromMinutes(5);
this._host.CloseTimeout = TimeSpan.FromMinutes(5);
var binding = new NetTcpBinding
{
CloseTimeout = TimeSpan.FromSeconds(15),
OpenTimeout = TimeSpan.FromSeconds(15),
SendTimeout = TimeSpan.FromSeconds(15),
ReceiveTimeout = TimeSpan.FromSeconds(15);
};
this._host.AddServiceEndpoint(typeof(IMessageReceiver), binding, "ISubscribe");
}
但目前没有渠道进入(.NET Framework 4.8 中的旧代码):
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.Single,
IncludeExceptionDetailInFaults = true)]
public class MessageReceiver : IMessageReceiver
{
...
public bool Subscribe()
{
try
{
IMessageSender callback = OperationContext.Current.GetCallbackChannel<IMessageSender>();
if (!_subscribers.Contains(callback))
{
_subscribers.Add(callback);
Console.WriteLine("Subscriber");
}
return true;
}
catch (Exception e)
{
Console.WriteLine("Subscribe Exception" + e.ToString());
return false;
}
}
...
}
我无法在 .NET Core 中移植此配置:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.Single,
IncludeExceptionDetailInFaults = true)]
我正在尝试这个:
public static IWebHostBuilder CreateHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddMessageReceiverFramework(new IPEndPoint(IPAddress.Any, 8065));
})
.UseUrls("net.tcp://localhost:8065/ISubscribe")
.UseStartup<Startup>();
public static class MessageReceiverExtensionsAux
{
public static IServiceCollection AddMessageReceiverFramework(this IServiceCollection services,
IPEndPoint endPoint)
{
services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<KestrelServerOptions>,
MessageReceiverOptionsSetup>());
services.Configure<MessageReceiverOptions>(o =>
{
o.EndPoint = endPoint;
});
services.TryAddSingleton<IMessageReceiver, MessageReceiver>();
return services;
}
}
我正在寻找在客户端 (.NET Framework 4.8) 上维持相同行为的最佳策略。
有什么建议吗?
非常感谢。
【问题讨论】:
-
有什么建议吗? 等到 CoreWCF 可用或坚持使用 Framework 4.8 ... 虽然 .net 核心中有 WCF 的客户端支持(对于某些绑定),但有没有官方支持托管
标签: c# web-services .net-core hosting nettcpbinding