GVKun编程网logo

C#windows服务订阅到webserver(c# window服务)

26

对于C#windows服务订阅到webserver感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解c#window服务,并且为您提供关于.net–如何从Windows服务调用Webservi

对于C#windows服务订阅到webserver感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解c# window服务,并且为您提供关于.net – 如何从Windows服务调用Webservice?、C# - VS2019 WebService创建与发布,并部署到Windows Server 2012R、Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较、Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较以及问题的宝贵知识。

本文目录一览:

C#windows服务订阅到webserver(c# window服务)

C#windows服务订阅到webserver(c# window服务)

我正在一个内部网站上工作.
每当网站上发布新内容时,所有用户都应该从网络服务器获取桌面弹出窗口.

我正在寻找自己的Windows服务,订阅服务器(使用像SignalR之类的东西),然后这个服务会显示一个简单的弹出窗口通知用户每当服务器发出一个消息.

但是,我不知道如果这样的事情还没有出现在这里.我一直在寻找一点,但找不到任何东西.

我主要是一个Web开发人员,从未构建Windows服务或C#桌面应用程序,所以我更喜欢使用一些现有的代码.

有谁知道这样的事情吗?

解决方法

建立一个Windows服务尝试上架: http://docs.topshelf-project.com/en/latest/
一般来说,一个,两个,三个是容易的
public class TownCrier
{
    readonly Timer _timer;
    public TownCrier()
    {
        _timer = new Timer(1000) {AutoReset = true};
        _timer.Elapsed += (sender,eventArgs) => Console.WriteLine("It is {0} and all is well",DateTime.Now);
    }
    public void Start() { _timer.Start(); }
    public void Stop() { _timer.Stop(); }
}

public class Program
{
    public static void Main()
    {
        HostFactory.Run(x =>                            
        {
            x.Service<TownCrier>(s =>                   
            {
               s.ConstructUsing(name=> new TownCrier());
               s.WhenStarted(tc => tc.Start());         
               s.WhenStopped(tc => tc.Stop());          
            });
            x.RunAsLocalSystem();                       

            x.SetDescription("Sample Topshelf Host");   
            x.SetdisplayName("Stuff");                  
            x.SetServiceName("Stuff");                  
        });                                             
    }
}

.net – 如何从Windows服务调用Webservice?

.net – 如何从Windows服务调用Webservice?

如何从Windows服务调用Webservice?

我在我的Web服务器上有一个web服务.

我有一个Windows服务来触发该Web服务.

所以我只想从我的Windows服务中集成并调用我的web服务.

我怎样才能做到这一点?

编辑:

TempWindowService是我的Windows应用程序的名称

MyServ是我对webservice的引用的名称.

TempWindowService.MyServ newService = new TempWindowService.MyServ();
 newService.BatchProcess();

这里BatchProcess()是我的webservice下的web方法.

我在网上得到错误

TempWindowService.MyServ newService = new TempWindowService.MyServ();

错误如下

'TempWindowService.MyServ' is a 'namespace' but is used like a 'type'

回答:

对于那些有兴趣解决这个问题的人来说,这就是要编写的代码

TempWindowService.MyServ.MyServSoapClient newService = new TempWindowService.MyServ.MyServSoapClient();

希望这有助于每个人都在寻找这个问题的解决方案.

总结

以上是小编为你收集整理的.net – 如何从Windows服务调用Webservice?全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

C# - VS2019 WebService创建与发布,并部署到Windows Server 2012R

C# - VS2019 WebService创建与发布,并部署到Windows Server 2012R

前言

  上一次数据库灾备和性能优化后,数据库专家建议,在不扩容的情况下,客户端不能再频繁的扫描数据库了!一句惊醒梦中人,因为我也发现数据库越来越卡了,自从上个项目上线后,就出现了这个情况。后来分析其原因,发现客户端每3秒中扫描一次数据库,一共5000+客户端,可想而知,频繁扫描严重影响到数据库性能。所以,我这边准备采用三层架构来解决这个问题,将现有的业务逻辑全部移植到WebService服务器上,客户端通过WebService服务,进而实现对数据库的操作。

  此篇只是记录一下,便于后续的学习,不足之处请指正。

创建WebService服务

  • 新建ASP.NET Web解决方案,命名为WebServiceTest,框架选择.NET Framework 4,如下图;

  • 添加一个Web服务,命名为WebServiceOracleTest,如下图;

  • 开始写一些基础Helper类;
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5 using System.Data;
  6 using System.Configuration;
  7 using Oracle.ManagedDataAccess.Client;
  8 using System.Text;
  9 using System.IO;
 10 
 11 namespace WebServiceTest
 12 {
 13     public class OracleHelper
 14     {
 15         //连接字符串
 16         public static string oraConnStr = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=XXX)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XXX)));Persist Security Info=True;User ID=XXX;Password=XXX";
 17 
 18         #region Oracle数据库操作通用方法
 19         /// <summary>
 20         /// 测试数据库连接是否正常
 21         /// </summary>
 22         /// <param name="strConn"></param>
 23         /// <returns></returns>
 24         public static bool CheckOracleConnect()
 25         {
 26             try
 27             {
 28                 OracleConnection conn = new OracleConnection();
 29                 conn.ConnectionString = oraConnStr;
 30                 conn.Open();
 31                 return true;
 32             }
 33             catch
 34             {
 35                 return false;
 36             }
 37         }
 38 
 39         /// <summary>  
 40         /// 执行数据库非查询操作,返回受影响的行数  
 41         /// </summary>  
 42         /// <param name="connectionString">数据库连接字符串</param>
 43         /// <param name="cmdType">命令的类型</param>
 44         /// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>  
 45         /// <param name="cmdParms">命令参数集合</param>  
 46         /// <returns>当前查询操作影响的数据行数</returns>  
 47         public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
 48         {
 49             OracleCommand cmd = new OracleCommand();
 50             using (OracleConnection conn = new OracleConnection(connectionString))
 51             {
 52                 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
 53                 int val = cmd.ExecuteNonQuery();
 54                 cmd.Parameters.Clear();
 55                 return val;
 56             }
 57         }
 58 
 59         /// <summary>  
 60         /// 执行数据库事务非查询操作,返回受影响的行数  
 61         /// </summary>  
 62         /// <param name="transaction">数据库事务对象</param>  
 63         /// <param name="cmdType">Command类型</param>  
 64         /// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>  
 65         /// <param name="cmdParms">命令参数集合</param>  
 66         /// <returns>当前事务查询操作影响的数据行数</returns>  
 67         public static int ExecuteNonQuery(OracleTransaction trans, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
 68         {
 69             OracleCommand cmd = new OracleCommand();
 70             PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
 71             int val = cmd.ExecuteNonQuery();
 72             cmd.Parameters.Clear();
 73             return val;
 74         }
 75 
 76         /// <summary>  
 77         /// 执行数据库非查询操作,返回受影响的行数  
 78         /// </summary>  
 79         /// <param name="connection">Oracle数据库连接对象</param>  
 80         /// <param name="cmdType">Command类型</param>  
 81         /// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>  
 82         /// <param name="cmdParms">命令参数集合</param>  
 83         /// <returns>当前查询操作影响的数据行数</returns>  
 84         public static int ExecuteNonQuery(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
 85         {
 86             if (connection == null)
 87                 throw new ArgumentNullException("当前数据库连接不存在");
 88             OracleCommand cmd = new OracleCommand();
 89             PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);
 90             int val = cmd.ExecuteNonQuery();
 91             cmd.Parameters.Clear();
 92             return val;
 93         }
 94 
 95         /// <summary>  
 96         /// 执行数据库查询操作,返回OracleDataReader类型的内存结果集  
 97         /// </summary>  
 98         /// <param name="connectionString">数据库连接字符串</param>
 99         /// <param name="cmdType">命令的类型</param>
100         /// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>  
101         /// <param name="cmdParms">命令参数集合</param>  
102         /// <returns>当前查询操作返回的OracleDataReader类型的内存结果集</returns>  
103         public static OracleDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
104         {
105             OracleCommand cmd = new OracleCommand();
106             OracleConnection conn = new OracleConnection(connectionString);
107             try
108             {
109                 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
110                 OracleDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
111                 cmd.Parameters.Clear();
112                 return reader;
113             }
114             catch
115             {
116                 cmd.Dispose();
117                 conn.Close();
118                 throw;
119             }
120         }
121 
122         /// <summary>  
123         /// 执行数据库查询操作,返回DataSet类型的结果集  
124         /// </summary>  
125         /// <param name="connectionString">数据库连接字符串</param>
126         /// <param name="cmdType">命令的类型</param>
127         /// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>  
128         /// <param name="cmdParms">命令参数集合</param>  
129         /// <returns>当前查询操作返回的DataSet类型的结果集</returns>  
130         public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
131         {
132             OracleCommand cmd = new OracleCommand();
133             OracleConnection conn = new OracleConnection(connectionString);
134             DataSet ds = null;
135             try
136             {
137                 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
138                 OracleDataAdapter adapter = new OracleDataAdapter();
139                 adapter.SelectCommand = cmd;
140                 ds = new DataSet();
141                 adapter.Fill(ds);
142                 cmd.Parameters.Clear();
143             }
144             catch
145             {
146                 throw;
147             }
148             finally
149             {
150                 cmd.Dispose();
151                 conn.Close();
152                 conn.Dispose();
153             }
154 
155             return ds;
156         }
157 
158         /// <summary>  
159         /// 执行数据库查询操作,返回DataTable类型的结果集  
160         /// </summary>  
161         /// <param name="connectionString">数据库连接字符串</param>
162         /// <param name="cmdType">命令的类型</param>
163         /// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>  
164         /// <param name="cmdParms">命令参数集合</param>  
165         /// <returns>当前查询操作返回的DataTable类型的结果集</returns>  
166         public static DataTable ExecuteDataTable(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
167         {
168             OracleCommand cmd = new OracleCommand();
169             OracleConnection conn = new OracleConnection(connectionString);
170             DataTable dt = null;
171 
172             try
173             {
174                 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
175                 OracleDataAdapter adapter = new OracleDataAdapter();
176                 adapter.SelectCommand = cmd;
177                 dt = new DataTable();
178                 adapter.Fill(dt);
179                 cmd.Parameters.Clear();
180             }
181             catch
182             {
183                 throw;
184             }
185             finally
186             {
187                 cmd.Dispose();
188                 conn.Close();
189                 conn.Dispose();
190             }
191 
192             return dt;
193         }
194 
195         /// <summary>  
196         /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值  
197         /// </summary>  
198         /// <param name="connectionString">数据库连接字符串</param>
199         /// <param name="cmdType">命令的类型</param>
200         /// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>  
201         /// <param name="cmdParms">命令参数集合</param>  
202         /// <returns>当前查询操作返回的结果集中位于第一行第一列的Object类型的值</returns>  
203         public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
204         {
205             OracleCommand cmd = new OracleCommand();
206             OracleConnection conn = new OracleConnection(connectionString);
207             object result = null;
208             try
209             {
210                 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
211                 result = cmd.ExecuteScalar();
212                 cmd.Parameters.Clear();
213             }
214             catch
215             {
216                 throw;
217             }
218             finally
219             {
220                 cmd.Dispose();
221                 conn.Close();
222                 conn.Dispose();
223             }
224 
225             return result;
226         }
227 
228         ///    <summary>  
229         ///    执行数据库事务查询操作,返回结果集中位于第一行第一列的Object类型的值  
230         ///    </summary>  
231         ///    <param name="trans">一个已存在的数据库事务对象</param>  
232         ///    <param name="commandType">命令类型</param>  
233         ///    <param name="commandText">Oracle存储过程名称或PL/SQL命令</param>  
234         ///    <param name="cmdParms">命令参数集合</param>  
235         ///    <returns>当前事务查询操作返回的结果集中位于第一行第一列的Object类型的值</returns>  
236         public static object ExecuteScalar(OracleTransaction trans, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
237         {
238             if (trans == null)
239                 throw new ArgumentNullException("当前数据库事务不存在");
240             OracleConnection conn = trans.Connection;
241             if (conn == null)
242                 throw new ArgumentException("当前事务所在的数据库连接不存在");
243 
244             OracleCommand cmd = new OracleCommand();
245             object result = null;
246 
247             try
248             {
249                 PrepareCommand(cmd, conn, trans, cmdType, cmdText, cmdParms);
250                 result = cmd.ExecuteScalar();
251                 cmd.Parameters.Clear();
252             }
253             catch
254             {
255                 throw;
256             }
257             finally
258             {
259                 trans.Dispose();
260                 cmd.Dispose();
261                 conn.Close();
262                 conn.Dispose();
263             }
264 
265             return result;
266         }
267 
268         /// <summary>  
269         /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值  
270         /// </summary>  
271         /// <param name="conn">数据库连接对象</param>  
272         /// <param name="cmdType">Command类型</param>  
273         /// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>  
274         /// <param name="cmdParms">命令参数集合</param>  
275         /// <returns>当前查询操作返回的结果集中位于第一行第一列的Object类型的值</returns>  
276         public static object ExecuteScalar(OracleConnection conn, CommandType cmdType, string cmdText, params OracleParameter[] cmdParms)
277         {
278             if (conn == null) throw new ArgumentException("当前数据库连接不存在");
279             OracleCommand cmd = new OracleCommand();
280             object result = null;
281 
282             try
283             {
284                 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
285                 result = cmd.ExecuteScalar();
286                 cmd.Parameters.Clear();
287             }
288             catch
289             {
290                 throw;
291             }
292             finally
293             {
294                 cmd.Dispose();
295                 conn.Close();
296                 conn.Dispose();
297             }
298 
299             return result;
300         }
301 
302         /// <summary>  
303         /// 执行数据库命令前的准备工作  
304         /// </summary>  
305         /// <param name="cmd">Command对象</param>  
306         /// <param name="conn">数据库连接对象</param>  
307         /// <param name="trans">事务对象</param>  
308         /// <param name="cmdType">Command类型</param>  
309         /// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>  
310         /// <param name="cmdParms">命令参数集合</param>  
311         private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, CommandType cmdType, string cmdText, OracleParameter[] cmdParms)
312         {
313             if (conn.State != ConnectionState.Open)
314                 conn.Open();
315 
316             cmd.Connection = conn;
317             cmd.CommandText = cmdText;
318 
319             if (trans != null)
320                 cmd.Transaction = trans;
321 
322             cmd.CommandType = cmdType;
323 
324             if (cmdParms != null)
325             {
326                 foreach (OracleParameter parm in cmdParms)
327                     cmd.Parameters.Add(parm);
328             }
329         }
330 
331         /// <summary>  
332         /// 将.NET日期时间类型转化为Oracle兼容的日期时间格式字符串  
333         /// </summary>  
334         /// <param name="date">.NET日期时间类型对象</param>  
335         /// <returns>Oracle兼容的日期时间格式字符串(如该字符串:TO_DATE(''2007-12-1'',''YYYY-MM-DD''))</returns>  
336         public static string GetOracleDateFormat(DateTime date)
337         {
338             return "TO_DATE(''" + date.ToString("yyyy-M-dd") + "'',''YYYY-MM-DD'')";
339         }
340 
341         /// <summary>  
342         /// 将.NET日期时间类型转化为Oracle兼容的日期格式字符串  
343         /// </summary>  
344         /// <param name="date">.NET日期时间类型对象</param>  
345         /// <param name="format">Oracle日期时间类型格式化限定符</param>  
346         /// <returns>Oracle兼容的日期时间格式字符串(如该字符串:TO_DATE(''2007-12-1'',''YYYY-MM-DD''))</returns>  
347         public static string GetOracleDateFormat(DateTime date, string format)
348         {
349             if (format == null || format.Trim() == "") format = "YYYY-MM-DD";
350             return "TO_DATE(''" + date.ToString("yyyy-M-dd") + "'',''" + format + "'')";
351         }
352 
353         /// <summary>  
354         /// 将指定的关键字处理为模糊查询时的合法参数值  
355         /// </summary>  
356         /// <param name="source">待处理的查询关键字</param>  
357         /// <returns>过滤后的查询关键字</returns>  
358         public static string HandleLikeKey(string source)
359         {
360             if (source == null || source.Trim() == "") return null;
361 
362             source = source.Replace("[", "[]]");
363             source = source.Replace("_", "[_]");
364             source = source.Replace("%", "[%]");
365 
366             return ("%" + source + "%");
367         }
368         #endregion
369     }
370 }
View Code
  • 写几个和Oracle交互的函数;
 1 [WebMethod(Description = "测试数据库连接,无输入参数,返回bool类型true或者false")]
 2         public bool CheckOraConnect()
 3         {
 4             return OracleHelper.CheckOracleConnect();
 5         }
 6 
 7         [WebMethod(Description = "输入日期型参数,返回string类型周别")]
 8         public string GetWeek(string sDate)
 9         {
10             try
11             {
12                 // 创建参数对象
13                 OracleParameter[] param = new OracleParameter[] { new OracleParameter(":date1", OracleDbType.Varchar2) };
14                 param[0].Value = sDate;
15                 // 返回 datatable转换成string;
16                 DataSet ds = new DataSet();
17                 ds = OracleHelper.ExecuteDataSet(OracleHelper.oraConnStr, CommandType.Text, CommonSQL.sqlGetWeek, param);
18                 if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
19                 {
20                     return ds.Tables[0].Rows[0][0].ToString();
21                 }
22                 else
23                 {
24                     return "Not Found";
25                 }
26             }
27             catch (Exception ex)
28             {
29                 return ex.ToString();
30             }
31 
32         }
View Code
  • 配置Web.config(添加一段,解决“测试窗体只能用于来自本地计算机的请求”的异常)
1      <webServices>
2         <protocols>
3           <add name="HttpSoap"/>
4           <add name="HttpPost"/>
5           <add name="HttpGet"/>
6           <add name="Documentation"/>
7         </protocols>
8       </webServices>
View Code

项目发布

  • 生成-发布;
  • 编辑-文件系统;
  • 选择保存,记住的文件名名称,我这里是Publish;
  • 发布。

项目部署

  • 将Publish文件复制到WindowsServer 2012 R2 上指定的路径下;
  • 打开IIS管理器;
  • 添加应用池,注意这里的.NET CLR版本需要与WebService服务.NET版本一致;
  • 添加网站(修改端口,避免端口冲突);
  • 设定默认文档(添加默认文档、设定文件夹权限),如下图。

 

 

 

 

网站部署测试

选中网站,右键管理网站,选中浏览,出现如下图。

测试一下

 

  作者:Jeremy.Wu
  出处:https://www.cnblogs.com/jeremywucnblog/
  本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较

Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较

.Net 4.5 WebSocket Server Running on Windows 7?

Net 4.5 WebSocket Server 可以运行在 Windows 7,但是Net 4.5的 ClientWebSocket 不支持 Windows 7,只支持 Windows 8 and Server 2012,但是可以使用第三方类库来支持Net 4.5 WebSocket 在win7,Windows 7上使用,如:

  • https://github.com/statianzo/Fleck
  • http://vtortola.github.io/WebSocketListener/
  • http://superwebsocket.codeplex.com/
  • https://archive.codeplex.com/?p=websocket4net
 
下面 来自   .Net 4.5 WebSocket Server Running on Windows 7?的相关讨论,
原文  https://stackoverflow.com/questions/12073455/net-4-5-websocket-server-running-on-windows-7
 

I know the ClientWebSocket class of .Net 4.5 is not supported on Windows 7, but is it possible to create a WebSocket server running on Windows 7 using the .Net 4.5 API?

To make myself clearer, according to both here and here, it looks like the server side part of the .Net 4.5 WebSocket implementation should be supported even on Windows 7, yet running a HttpListener and trying to access it using an open-source WebSocket implementation got me a "Portocol not supported" error

  •  
    While it is an interesting question, it doesn''t show much effort. What have you tried? According to MSDN indeed only Windows 8 and Server 2012 are supported. Do you require .NET built-in support? Otherwise there are various third-party libraries that suit your requirements. – CodeCaster Aug 22 ''12 at 12:54
2 Answers
 
 
up vote 34down voteaccepted

The OS-level HTTP.SYS support for websockets is limited to Win8 / Windows Server 2012 - which I agree is silly (it should be part of a windows-update, or a service-pack at most, IMO).

This means that you can''t use the framework support for WebSockets from HttpListener or ASP.NET directly.

But: as for "is it possible to create a WebSocket server" - sure... but only if you handle the TCP/IP comms yourself, or use a 3rd-party library for the same. This is a little annoying, but is not as bad as it might sound.

Edit: after some checking, I can confirm that the server-side components for this do not work on Windows 7 (etc); the IsWebSocketRequest returns false even though it is a web-socket request with Connection: Upgrade and Upgrade: websocket (etc) headers (from a Chrome session, as it helps).

I am, however, very surprised to find that the client-side pieces don''t work, because: that is simpler and doesn''t (or at least, doesn''t need to) involve HTTP.SYS. Trying to use them throws a PlatformNotSupportedException.

  
answered
  • 1
    @sternr I don''t think they are; I think it''ll error at runtime. What is even more interesting: I was under the impression that ClientWebSocket was supported on Win7 etc, since it doesn''t depend on HTTP.SYS! – Marc Gravell Aug 22 ''12 at 13:18
  • 1
    @sternr did some more research / testing on that; answer stands. – Marc Gravell Aug 22 ''12 at 13:49
  • 7
    @sternr it is bizarre from my point of view too. I''m very disappointed by this, especially the client-side pieces. Meh, no actually I''m disappointed by the server-side pieces too. – Marc Gravell Aug 22 ''12 at 13:52
  • 2
    Both the client-side and the server-side pieces depend on an OS-level component (websocket.dll), and this component only ships with Windows 8 / Server 2012. I am unsure of why this component cannot run downlevel, but the dependency explains the behavior you are seeing. – Levi Aug 24 ''12 at 6:13
  • 4
    Yeah, honestly, who thinks this is really a technical issue. – Craig Dec 3 ''13 at 1:58
 
up vote 6down vote

As Marc says, the Microsoft APIs do not work on Windows 7. However there are several open source libraries that support WebSockets on Windows 7, and in some cases even cross platform via Mono.

  • https://github.com/statianzo/Fleck
  • http://vtortola.github.io/WebSocketListener/
  • http://superwebsocket.codeplex.com/

Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较以及问题

Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较以及问题

Net 4.5 WebSocketWindows 8, Windows 10, Windows Server 2012可以,但是在Windows 7, 就会报错。

错误1、“一个文件正在被访问,当前无法使用该文件

错误2、“参数无效

错误3、throws a PlatformNotSupportedException.

 

解决方法:

Net 4.5 WebSocket Server 可以运行在 Windows 7,但是Net 4.5的 ClientWebSocket 不支持 Windows 7,

只支持 Windows 8 and Server 2012,

但是可以使用第三方类库来支持Net 4.5 WebSocket 在win7,Windows 7上使用,

具体参考如下:

  • https://github.com/statianzo/Fleck
  • http://vtortola.github.io/WebSocketListener/
  • http://superwebsocket.codeplex.com/
  • https://archive.codeplex.com/?p=websocket4net

关于C#windows服务订阅到webserverc# window服务的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.net – 如何从Windows服务调用Webservice?、C# - VS2019 WebService创建与发布,并部署到Windows Server 2012R、Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较、Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较以及问题等相关知识的信息别忘了在本站进行查找喔。

本文标签: