我需要实现一个功能,就是当客户端(asp.net)发送一个我认为有价值的消息到服务器,然后我这边在服务器上做一个windows服务监听。要怎么才能发送让服务到抓到。发送的消息不写入数据库大家帮帮忙,提供个思路也行

解决方案 »

  1.   

    消息到服务器如何放这个消息?用消息队列还是文件?windows服务监听只能是定时去消息服务器读取一下。这样的设计感觉有点别扭。感觉在消息服务器收到消息后发送给所有的应用吧。
      

  2.   

    主要是客户端发送信息来了后,在服务器上了,我还没想清楚怎么让服务接受。在文件里面估计不是很现实。socket我考虑中
      

  3.   

    如果消息量不大的话
    可以用aspx写文件,服务定时读取文件,对比最后写入时间.读取内容. 每天1K条以下的都可以这反做了,可以按日期建文件. Socket监听写起来比较烦
      

  4.   

    socket加上timer可以实现,也不是很麻烦
    贴部分代码,不是我写的,但是一直在用:
            // 负责监听的线程
            private System.Threading.Thread m_thread;
            // 本地IP地址
            private string m_tcpIPAddress;
            //监听的端口
            private int m_tcpListeningPort;
            // 最大同时异步连接
            private int m_tcpListeningPortBacklog;
            // 指示服务是否停止的标志位
            private bool m_fShutdown;        protected override void OnStart(string[] args)
            {
                        m_thread = new Thread(new ThreadStart(ListenerThread));
                        m_thread.Start();             
            }        protected override void OnStop()
            {
                m_fShutdown = true;
                m_evtListen.Set();
            }        private void ListenerThread()
            {
                IPEndPoint localEndPoint = new IPEndPoint(System.Net.IPAddress.Parse(m_tcpIPAddress), m_tcpListeningPort);            // 创建套接字
                Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            // 将套接字和本地终结点绑定,监听端口
                try
                {
                    listener.Bind(localEndPoint);
                    listener.Listen(m_tcpListeningPortBacklog);                while (!m_fShutdown)
                    {
                        m_evtListen.Reset();                    listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);                    //等连接建立后再继续
                        m_evtListen.WaitOne();
                    }            }
                catch (Exception exp)
                {            }
            }        private void AcceptCallback(IAsyncResult ar)
            {
                //指示主线程继续
                m_evtListen.Set();            try
                {
                    Socket listener = (Socket)ar.AsyncState;
                    Socket handler = listener.EndAccept(ar);                MyObject state = new MyObject();
                    state.workSocket = handler;
                    handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                        new AsyncCallback(ReadCallback), state);
                }
                catch (Exception exp)
                {            }
            }        private void ReadCallback(IAsyncResult ar)
            {
                string content;
                int index, start, startLast, end, lenEnd;            MyObject state = (MyObject)ar.AsyncState;
                Socket handler = state.workSocket;            try
                {
                    int bytesRead = handler.EndReceive(ar);                if (bytesRead > 0)
                    {
                        string buffer = Encoding.ASCII.GetString(state.buffer, 0, bytesRead);
                        //以下对接受到的数据进行处理MyObject是一个自定义的类:
            private class MyObject
            {
                public Socket workSocket = null;
                // 接受缓冲区的大小
                public const int BufferSize = 2048;
                // 接受缓冲区
                public byte[] buffer = new byte[BufferSize];
                // 接受到的字符串
                public StringBuilder sb = new StringBuilder();
                // MAC地址
                public char[] mac_addr = null;
            }