相关疑难解决方法(0)

ASP.NET客户端应用程序中的WCF ChannelFactory和Channel缓存

我正在构建一系列将由多个应用程序使用的WCF服务.因此,我正在尝试定义一个公共库来访问WCF服务.

知道不同用户发出的每个服务请求应该使用一个不同的Channel我正在考虑缓存Channel per-request(HttpContext.Current.Items)并缓存ChannelFactory用于创建每个Application(HttpApplication.Items)的通道,因为我可以创建多个通道相同ChannelFactory.

但是,在关闭ChannelFactory和Channel时,我对这个缓存机制有疑问.

  1. 我是否需要在使用后,在请求结束时关闭Channel,或者当该请求的上下文死亡时,是否可以将其关闭(?)?
  2. 那么ChannelFactory呢?由于每个通道都与创建它的ChannelFactory相关联,因此在应用程序进程(AppDomain)的生命周期内保持相同的ChannelFactory是否安全?

这是我用来管理这个的代码:

public class ServiceFactory
{
    private static Dictionary<string, object> ListOfOpenedChannels
    {
        get
        {
            if (null == HttpContext.Current.Items[HttpContext.Current.Session.SessionID + "_ListOfOpenedChannels"])
            {
                HttpContext.Current.Items[HttpContext.Current.Session.SessionID + "_ListOfOpenedChannels"] = new Dictionary<string, object>();
            }

            return (Dictionary<string, object>)HttpContext.Current.Items[HttpContext.Current.Session.SessionID + "_ListOfOpenedChannels"];
        }
        set
        {
            HttpContext.Current.Items[HttpContext.Current.Session.SessionID + "_ListOfOpenedChannels"] = value;
        }
    }

    public static T CreateServiceChannel<T>()
    {
        string key = typeof(T).Name;

        if (ListOfOpenedChannels.ContainsKey(key))
        {
            return (T)ListOfOpenedChannels[key];
        }
        else
        {
            ChannelFactory<T> channelF = new ChannelFactory<T>("IUsuarioService");
            T channel = …
Run Code Online (Sandbox Code Playgroud)

performance wcf .net-3.0 channel channelfactory

6
推荐指数
1
解决办法
7298
查看次数

为 ASP.NET Core 中的每个请求创建新的 WCF 客户端是否会导致套接字耗尽?

本文介绍了 HttpClient 的一个众所周知的问题,该问题可能导致套接字耗尽

我有一个 ASP.NET Core 3.1 Web 应用程序。在 .NET Standard 2.0 类库中,我按照此说明在 Visual Studio 2019 中添加了 WCF Web 服务引用。

在服务中,我按照文档中描述的方式使用 WCF 客户端。创建 WCF 客户端的实例,然后针对每个请求关闭客户端。

public class TestService
{
    public async Task<int> Add(int a, int b)
    {
        CalculatorSoapClient client = new CalculatorSoapClient();
        var resultat = await client.AddAsync(a, b);
        //this is a bad way to close the client I should also check
        //if I need to call Abort()
        await client.CloseAsync();
        return resultat;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道在没有任何检查的情况下关闭客户端是不好的做法,但就本示例而言,这并不重要。

当我启动应用程序并向使用 …

.net asp.net wcf web-services

5
推荐指数
1
解决办法
3292
查看次数

有关检查WCF连接的问题已打开

我有关于检查WCF连接是否打开的问题。我的WCF连接是双向的。我使用State属性来检查客户端的连接状态。我的功能:

private bool ConnectionIsOpen()
{
    if (m_Service != null && (m_Service.State | CommunicationState.Opened) == CommunicationState.Opened)
    {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个服务,该服务每10秒运行一次线程,以检查连接状态。我使用ConnectionIsOpen()方法进行检查。在Windows XP上运行时一切都很好。但是,在Windows 7上运行时会出现问题。

当我拔下网络电缆以创建要断开的连接时,如果在Windows XP上运行应用程序,则检查连接状态为“故障”,但如果在Windows 7上运行,则检查连接的状态仍为“打开”。

在这种情况下,任何人都可以帮助我如何检查连接是否打开。谢谢。

.net c# wcf winforms

2
推荐指数
1
解决办法
6070
查看次数