在ASP中持久化c#套接字.网网络服务

本文关键字:套接字 网络服务 持久化 ASP | 更新日期: 2023-09-27 18:05:47

首先让我们讨论一下我的例子:在我的情况下,我有三个方面:1-客户端HTML页面2 - ASP。. NET API,托管在windows 2008 Web服务器上3-黑盒TCP套接字服务器(托管在内部区域,不能从外部世界访问),它将接收请求并发送回响应。

HTML页面向ASP发送一个AJAX调用。. NET API服务,之后API服务将打开一个连接到内部TCP套接字服务器(黑匣子)。

我想让套接字连接每天打开一次。因为我有很多AJAX调用来回TCP服务器。我不需要为每个请求打开一个Socket连接。

我已经尝试使用异步套接字的例子使用下面的链接:https://msdn.microsoft.com/en-us/library/bew39x2a (v = vs.110) . aspx

有没有人尝试过这种情况,我需要最好的和简单的方法来做到这一点?如有任何建议,我将不胜感激

在ASP中持久化c#套接字.网网络服务

引用SO

REST在设计上是无状态的。通过添加会话(或其他任何类似的东西),您将使其具有状态,并且违背了使用RESTful API的任何目的。

RESTful服务的整个思想是每个资源都是唯一的使用通用语法可寻址,用于超媒体链接和每个HTTP请求本身应该携带足够的信息接受者处理它要与无状态者完全和谐HTTP的性质".

所以,你的web服务真的不应该保留套接字(或任何状态)数据。

如果你仍然认为使用单个套接字是至关重要的,我将这样做:

实现SingleSocket类(具有相应的接口)。该类将在创建套接字后存储套接字的单个实例(Singleton模式)

然后,通过依赖注入框架将SingleSocket类注入到controller,并在内部使用它的方法。

这样你就可以抽象出你的实现细节 (single open socket),同时保留控制的责任(与TCP服务器通信)

这里是依赖注入教程的链接。

这是我在你的例子中看到的依赖注入的伪代码:

interface ISocket : IDisposable
{
    void Init();
    void Send();
    void Dispose();
}
public class Mycontroller
{
    private readonly ISocket _singletonSocket;
    public Mycontroller(ISocket singletonSocket)
    {
        _singletonSocket = singletonSocket;
    }
    public void Init(){
        this._singletonSocket.Init();
    }
    public void Send()
    {
        this._singletonSocket.Send(); // handles the whole send/recieve logic
    }
    public void Dispose()
    {
        this._singletonSocket.Dispose();
    }
}

还有一点要注意:

我找到这个套接字。IO . js库,同时回答你的问题

我建议调查一下。也许它更适合你的需要