在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
有没有人尝试过这种情况,我需要最好的和简单的方法来做到这一点?如有任何建议,我将不胜感激引用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库,同时回答你的问题
我建议调查一下。也许它更适合你的需要