All posts by 龙生
开除员工的五个理由
本文作者Matthew Bellows,Yesware软件公司创始人。 我一辈子被开除过两次,深知被开后心情是非常不爽的。年轻的时候喜欢闯荡,第一次被开除觉得是对自我的释放,但是渐渐发现,这是对自己的不负责,顺带失业6个月。 现在我自己开了一家公司,要为团队的发展担忧。招聘,算是我最喜欢的一个环节,可以跟许多有能力的人交流,并邀请有识之士进入团队。当然,开除员工也在所难免,当员工与团队或者公司的发展无法保持同步之时,我们就会考虑开除他。 在我的公司,在开除员工之前,我们会从5个品质以及一个关键因素出发对员工进行分析,最后得出是否开除的决定。 这五个品质是开除员工之前首先要考虑的不分,如果员工已经缺少了其中几个或者全部品质,我们会以最可气最尊重的方式将其“请出公司”: 1.高效率:公司不是一个大家庭,而是一个高效率的团队。每个企业都想研发出世界级的产品,这就需要所有员工都能保持高效率。如果员工做不到这一点,照Netflix首席执行官Reed Hastings的话说就是:“赶紧地,打包走人。” 2.积极性:所有进入公司的员工工作之初都是非常积极的,但因为产品研发需要一定的周期,这可能会抹杀许多人的积极性,但是这种积极性需要维持下去或者 得到提升。同时也需要勇气。如果我们发现员工没有了积极性,工作不再积极,我们就会考虑换人。当然我们更欣赏那些工作积极,充满热情的员工。 3.成长:对于一个快速发展的企业来说,改变是不可避免的,所以就要求提高适应变化的能力,提高技术水平。在我的企业中,我非常看重员工在经过一段时间的工作之后能不能得到成长,如果没法成长,抱歉! 4.诚实与自律:这两点是做人的基本原则,如果员工连诚实、自律都做不到,除了祸害团队其他成员,我还找不出别的功能。公司尊重员工,员工也应该尊重企业。 5.宽容:在一个快速发展的企业中,员工都处在高压状态下。企业工作多,客户需求也多。即便有压力,我们要对自己宽容,也要对客户宽容。宽容的意义还要更宽,比如不歧视,无性别和种族主义,不侮辱他人等。 所以说,如果有员工出现了不符合以上品质的情况,我们开除他的几率就会变得非常大。但是在任何一家公司,不能说开除就开除,得有一个正式的理由,我个人认为最有用的也是最关键的就是“企业资金预算不够”。 另外对于一家企业来说,开除人也就意味着要继续招聘人,不能让零和游戏出现负数。另外也要在用人过程中严禁出现“员工排序”的情况,因为这种制度已经导致微软等大企业停滞不前。 开除员工,并不是一个轻松的话题,对于员工和企业来说都非常重要。任何加入创业企业的员工都要清楚地认清他们未来几年的工作状况,创业者也要对他们所处 的和所打造的环境诚实、负责。在不符合公司发展规划的员工没有打乱这个环境之前,最好还是以相互尊重的方式将其“开除”。 转自:http://www.oschina.net/news/34457/dismissed-employees-reasons
View Details不容错过的 window8 metro UI 风格的 web 资源
最近微软已经正式发布了windows 8操作系统,window操作系统的风格已经完全改变成了瓦片状的Metro UI。 对于微软来说这是一个巨大的改变,而且所有微软的平台包括,桌面,平板,移动及其网站都使用这个UI风格。 Metro UI包含了所有的现代web设计的特点,包括了,简化,基于网格的界面,并且富有连续性。 大家如果有兴趣可以看看这个界面设计说明 (http://msdn.microsoft.com/en-us/library/windows/apps/hh465424.aspx)。 如果你也喜欢Metro风格的话,这里我们收集了很多windows 8的Metro UI风格布局资源,希望大家喜欢! Metro风格的网站框架和模板 Metro UI CSS Metro UI CSS是一个非常完整的创建Metro风格的网站的框架。使用LESS创建,并且拥有网格系统,排版样式,表格,按钮和图片。 同时也拥有内建的javascript组件,帮助你生成片状,菜单,边栏,进度条,提示等等 etro UI CSS BootMetro BootMetro是一个Twitter Bootstrap的Metro风格主题。你可以创建Metro风格的样式。例如,片状UI,工具栏,其它组件。 metro-bootstrap 类似上面的BootMetro,这是另外一个Twitter Bootstrap主题,拥有所有的漂亮组件,并且包含了LESS。 Metro UI Template 这是一个网站的框架和模板,用来创建windows 8 Metro UI风格的界面。拥有平滑的过渡效果和tiles(包括,RSS,Twitter,weather等等) 这个模板支持模板并且拥有jQuery UI主题。 Droptiles – Metro-Style Web Dashboard 一个开源的windows 8开始界面dashboard(类似igoogle)。 使用tiles来展示信息,每一个tiles是独立的应用可以用来获取数据。这个项目基于ASP.NET可以移植到其它语言。 PHP Image Gallery In Metro UI 一个PHP的图片画廊可以自动生成缩略图,并且可以使用lightbox来显示图片。支持HTML5和CSS3。 Motown 一个用来创建Metro风格应用的类库,使用很少代码即可实现。不依赖其它javascript类库。 Metro风格jQuery插件资源 jq-metro 一个jQuery插件用来创建Metro风格的界面。目前,panorama,privot,进度条,列表选择,切换,按钮等。 Metro JS 这个jQuery Metro UI插件可以用来创建tiles,应用条,并且支持主题。功能和设计完全可定制。 jQuery Metro UI Plugin 这个插件可以简单的创建tiles视图并且支持聚焦。 jQuery Mobile Metro Theme 一个免费jQuery移动Metro UI主题,完全支持自定义。使用不同插件来处理应用栏,进度条,按钮和日期选择器。 Metro UI Theme Builder For jQuery UI 拥有themeroller风格的jQuery UI主题创建,帮助你创建Metro UI风格样式 TileJS (non-jQuery) 一个标准的javascript代码来创建tiles并且拥有完整tiles的onclick效果。 免费Metro UI图标 Modern UI Icons 一套简单手绘的Metro […]
View DetailsWPF:在异步操作中使用CommandManager手动更新Command执行状态(转载)
WPF判断命令(Command)是否能够执行是通过ICommand.CanExecute事件,在实际程序中路由命令一般是通过CommandBinding来使命令得到实际操作代码,但是这个CanExecute事件的调用是由WPF控制的,有些时候,比如命令执行后进行一些异步耗时操作,操作完成后会影响CanExecute事件结果,但是WPF不会立即做出反应,那么这个时侯就需要手动调用CommandManager.InvalidateRequerySuggested对命令系统进行一次刷新。 比如下面这个小程序 <Window.CommandBindings> <CommandBinding Command="New" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed" /> </Window.CommandBindings> <StackPanel> <Button Command="New">执行工作</Button> <TextBlock Name="tbl" Text="等待执行"></TextBlock> </StackPanel> // // 事件执行代码 // privatevoid CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute =!finished; } privatevoid CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) { System.Threading.ThreadPool.QueueUserWorkItem(dowork); } bool finished =false; void dowork(object obj) { updateUI("开始工作"); System.Threading.Thread.Sleep(1000); updateUI("工作结束"); finished =true; } void updateUI(string msg) { Dispatcher.BeginInvoke((Action)(() => tbl.Text = msg)); } 程序按钮点击后下面文字显示“工作结束”,这时按钮理应是禁用的(因为此时CanExecute结果是false),但实际上按钮没有被禁用,只有界面发生改变后(如焦点,按键变化,或者按钮再次被点击),按钮才会被禁用,因为此时WPF才调用相应的CanExecute事件。 手动调用CommandManager.InvalidateRequerySuggested就可以解决问题,注意这个函数只有在UI主线程下调用才会起作用。 void dowork(object obj) { updateUI("开始工作"); System.Threading.Thread.Sleep(1000); updateUI("工作结束"); finished =true; //手动更新 updateCommand(); } void updateCommand() { Dispatcher.BeginInvoke((Action)(() […]
View DetailsWPF Timer替代者
做过WinForm开发的都会郁闷WPF竟然没有Timer。 今天想在WPF中用Timer可是发现WPF没有Timer类,找了半天发现新增了一个 DispatcherTimer确实好用和WinForm中Timer用法相似。 —————————————————————————————————————————-- 引:银光中国 在 WPF 中不再有类似 WinForm 中的 Timer 控件,因此,需要使用 DispatcherTimer 类来实现类似 Timer 的定时执行事件,该事件使用委托方式实现。DispatcherTimer 类 在 System.Windows.Threading 下,需要 using System.Windows.Threading 命名空间。 MSDN事例: 创建了名为 dispatcherTimer 的 DispatcherTimer 对象。 事件处理程序 dispatcherTimer_Tick 被添加到 dispatcherTimer 的 Tick 事件中。 使用 TimeSpan 对象将 Interval 设置为 1 秒,并启动了计时器。
|
1 |
<ol class="dp-c"><li class="alt"><span><span class="comment">// DispatcherTimer setup</span><span> </span></span></li><li><span>dispatcherTimer = <span class="keyword">new</span><span> System.Windows.Threading.DispatcherTimer(); </span></span></li><li class="alt"><span>dispatcherTimer.Tick += <span class="keyword">new</span><span> EventHandler(dispatcherTimer_Tick); </span></span></li><li><span>dispatcherTimer.Interval = <span class="keyword">new</span><span> TimeSpan(0,0,1); </span></span></li><li class="alt"><span>dispatcherTimer.Start(); </span></li></ol> |
Tick 事件处理程序将更新显示当前秒数的 Label,并且它将对 CommandManager 调用 InvalidateRequerySuggested。
|
1 |
<ol class="dp-c"><li class="alt"><span><span class="comment">// System.Windows.Threading.DispatcherTimer.Tick handler</span><span> </span></span></li><li><span> <span class="comment">//</span><span> </span></span></li><li class="alt"><span> <span class="comment">// Updates the current seconds display and calls</span><span> </span></span></li><li><span> <span class="comment">// InvalidateRequerySuggested on the CommandManager to force </span><span> </span></span></li><li class="alt"><span> <span class="comment">// the Command to raise the CanExecuteChanged event.</span><span> </span></span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">void</span><span> dispatcherTimer_Tick(</span><span class="keyword">object</span><span> sender, EventArgs e) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="comment">// Updating the Label which displays the current second</span><span> </span></span></li><li class="alt"><span> lblSeconds.Content = DateTime.Now.Second; </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">// Forcing the CommandManager to raise the RequerySuggested event</span><span> </span></span></li><li><span> CommandManager.InvalidateRequerySuggested(); </span></li><li class="alt"><span> } </span></li></ol> |
转自:http://www.cnblogs.com/midcn/archive/2011/03/18/1987928.html
View DetailsC#操作注册服务卸载服务启动服务停止服务
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 |
using System; using System.Configuration.Install; using System.Collections; using System.Collections.Specialized; IDictionary stateSaver = new Hashtable(); 一、安装服务: private void InstallService(IDictionary stateSaver, string filepath) { try { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController("ServiceName"); if(!ServiceIsExisted("ServiceName")) { //Install Service AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path =filepath; myAssemblyInstaller.Install(stateSaver); myAssemblyInstaller.Commit(stateSaver); myAssemblyInstaller.Dispose(); //--Start Service service.Start(); } else { if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); } } } catch (Exception ex) { throw new Exception("installServiceError\n" + ex.Message); } } 或者 /// <summary> /// 安装服务 /// </summary> /// <param name="p_Path">指定服务文件路径</param> /// <param name="p_ServiceName">返回安装完成后的服务名</param> /// <returns>安装信息 正确安装返回""</returns> public static string InsertService(string p_Path, ref string p_ServiceName) { if (!File.Exists(p_Path)) return "文件不存在!"; p_ServiceName = ""; FileInfo _InsertFile = new FileInfo(p_Path); IDictionary _SavedState = new Hashtable(); try { //加载一个程序集,并运行其中的所有安装程序。 AssemblyInstaller _AssemblyInstaller = new AssemblyInstaller(p_Path, new string[] { "/LogFile=" + _InsertFile.DirectoryName + "\\" + _InsertFile.Name.Substring(0, _InsertFile.Name.Length - _InsertFile.Extension.Length) + ".log" }); _AssemblyInstaller.UseNewContext = true; _AssemblyInstaller.Install(_SavedState); _AssemblyInstaller.Commit(_SavedState); Type[] _TypeList = _AssemblyInstaller.Assembly.GetTypes();//获取安装程序集类型集合 for (int i = 0; i != _TypeList.Length; i++) { if (_TypeList[i].BaseType.FullName == "System.Configuration.Install.Installer") { //找到System.Configuration.Install.Installer 类型 object _InsertObject = System.Activator.CreateInstance(_TypeList[i]);//创建类型实列 FieldInfo[] _FieldList = _TypeList[i].GetFields(BindingFlags.NonPublic | BindingFlags.Instance); for (int z = 0; z != _FieldList.Length; z++) { if (_FieldList[z].FieldType.FullName == "System.ServiceProcess.ServiceInstaller") { object _ServiceInsert = _FieldList[z].GetValue(_InsertObject); if (_ServiceInsert != null) { p_ServiceName = ((ServiceInstaller)_ServiceInsert).ServiceName; return ""; } } } } } return ""; } catch (Exception ex) { return ex.Message; } } 二、卸载windows服务: private void UnInstallService(string filepath) { try { if (ServiceIsExisted("ServiceName")) { //UnInstall Service AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.Uninstall(null); myAssemblyInstaller.Dispose(); } } catch (Exception ex) { throw new Exception("unInstallServiceError\n" + ex.Message); } } 三、判断window服务是否存在: private bool ServiceIsExisted(string serviceName) { ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName == serviceName) { return true; } } return false; } 四、启动服务: private void StartService(string serviceName) { if (ServiceIsExisted(serviceName)) { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); for (int i = 0; i < 60; i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) { break; } if (i == 59) { throw new Exception(startServiceError.Replace("$s$", serviceName)); } } } } } 另外方法 /// <summary> /// 启动服务 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public static bool ServiceStart(string serviceName) { try { ServiceController service = new ServiceController(serviceName); if (service.Status == ServiceControllerStatus.Running) { return true; } else { TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 10); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } } catch { return false; } return true; } 五、停止服务: private void StopService(string serviceName) { if (ServiceIsExisted(serviceName)) { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) { service.Stop(); for (int i = 0; i < 60; i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped) { break; } if (i == 59) { throw new Exception(stopServiceError.Replace("$s$", serviceName)); } } } } } 另外一方法: /// <summary> /// 停止服务 /// </summary> /// <param name="serviseName"></param> /// <returns></returns> public static bool ServiceStop(string serviseName) { try { ServiceController service = new ServiceController(serviseName); if (service.Status == ServiceControllerStatus.Stopped) { return true; } else { TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 10); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } } catch { return false; } return true; } 六 修改服务的启动项 /// <summary> /// 修改服务的启动项 2为自动,3为手动 /// </summary> /// <param name="startType"></param> /// <param name="serviceName"></param> /// <returns></returns> public static bool ChangeServiceStartType(int startType, string serviceName) { try { RegistryKey regist = Registry.LocalMachine; RegistryKey sysReg = regist.OpenSubKey("SYSTEM"); RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet"); RegistryKey services = currentControlSet.OpenSubKey("Services"); RegistryKey servicesName = services.OpenSubKey(serviceName, true); servicesName.SetValue("Start", startType); } catch (Exception ex) { return false; } return true; } 七 获取服务启动类型 /// <summary> /// 获取服务启动类型 2为自动 3为手动 4 为禁用 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public static string GetServiceStartType(string serviceName) { try { RegistryKey regist = Registry.LocalMachine; RegistryKey sysReg = regist.OpenSubKey("SYSTEM"); RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet"); RegistryKey services = currentControlSet.OpenSubKey("Services"); RegistryKey servicesName = services.OpenSubKey(serviceName, true); return servicesName.GetValue("Start").ToString(); } catch (Exception ex) { return string.Empty; } } 八 验证服务是否启动 服务是否存在 /// <summary> /// 验证服务是否启动 /// </summary> /// <returns></returns> public static bool ServiceIsRunning(string serviceName) { ServiceController service = new ServiceController(serviceName); if (service.Status == ServiceControllerStatus.Running) { return true; } else { return false; } } /// <summary> /// 服务是否存在 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public static bool ServiceExist(string serviceName) { try { string m_ServiceName = serviceName; ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName.ToLower() == m_ServiceName.ToLower()) { return true; } } return false; } catch (Exception ex) { return false; } } 注:手动安装window服务的方法: 在“Visual Studio 2005 命令提示”窗口中,运行: 安装服务:installutil servicepath 卸除服务:installutil /u servicepath |
View Details
分享一个QQ关闭窗口的代码
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> function QqClose() { window.opener = null; window.open('', '_top'); window.top.close(); window.close(); } </script> <a href="javascript:window.close();void(0);">正常关闭</a> <a href="javascript:QqClose();void(0);">QQ关闭</a> </body> </html> |
View Details
线程间操作无效: 从不是创建控件“label1”的线程访问它
Thread thread=null; //定义线程 //开始线程 private void button1_Click(object sender, EventArgs e) { thread = new Thread(new ThreadStart(StartThread)); thread.Start();//开始线程 } private void StartThread() { int i = 0; while (true) { this.label1.Text = i.ToString(); //此处报错 i++; } } //结束线程 private void button4_Click(object sender, EventArgs e) { thread.Abort(); } 问题:当我们运行的时候会出现错误:"线程间操作无效: 从不是创建控件“label1”的线程访问它。" 解决方案:在程序运行的时候增加一句话,如下: public Form1() {InitializeComponent();Control.CheckForIllegalCrossThreadCalls = false; //这是增加的一句话 } 缺点:将UI传给了子线程,违背了弱耦合、封装的思想。子线程去更新UI的状态,如果有多个不同主线程要获取子线程状态,怎么办?
View DetailsJS中操作table的方法
JS中操作table的方法 var myTable = document.getElementById("myTable "); //添加行 var newTR = myTable.insertRow(index); 该方法创建一个新的 TableRow 对象表示一个新的 <tr> 标记,并把它插入表中的指定位置。 新行将被插入 index 所在行之前。若 index 等于表中的行数,则新行将被附加到表的末尾。 如果表是空的,则新行将被插入到一个新的 <tbody> 段,该段自身会被插入表中。 //设置行的id和class属性 newTR.id = "myid"; newTR.className="MainContentText"; //添加列:序号 var newTD=newTR.insertCell(0); //添加列内容 newTD.innerHTML = "dfdsf"; //删除表所有行,只留标题行 var rows = myTable.rows.length; for(var i=0;i<rows-1;i++){ myTable.deleteRow();//不给参数,代表删除最后一行 } JS本身不支持方法重载 Js中实现方法重载的方式也知道了呵呵(会默认调用参数最多的那个方法) 转自:http://www.cnblogs.com/judy/archive/2010/06/05/1752230.html
View DetailsC#进制转换
|
1 |
//十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2));//十进制转八进制Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8));//十进制转十六进制Console.WriteLine("十进制166的十六进制表示: "+Convert.ToString(166, 16)); //二进制转十进制Console.WriteLine("二进制 111101 的十进制表示: "+Convert.ToInt32("111101", 2));//八进制转十进制Console.WriteLine("八进制 44 的十进制表示: "+Convert.ToInt32("44", 8));//十六进制转十进制Console.WriteLine("十六进制 CC的十进制表示: "+Convert.ToInt32("CC", 16)); |
View Details
详解在IIS中配置并运行WCF服务
【IT168 技术文档】WCF是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。 在IIS中运行服务 之前我们让Derivatives Calculator服务在一个.NET可执行文件中运行,在这个练习中,我们将让服务在IIS中运行。 利用IIS作为宿主程序来运行WCF服务通常有许多好处。 ·将项目构建到\bin目录中 为了方便部署,我们需要对服务项目进行配置,让它编译到一个bin目录中。 1. 在Solution Explorer中右键单击DerivativesCalculatorService项目并选择Properties菜单项。 2. 在Project designer中,单击Build选项卡。 3. 将Output path从bin\Debug\改为bin\,如图所示。 Project designer中经过调整的Output path属性 4. 选择File | Save All菜单项。 5. 选择File | Close菜单项来关闭Project designer。 现在,在构建服务时产生的所有文件都会被输出到\bin目录中。 ·添加一个.svc文件 为了让WCF服务能够在IIS中运行,我们需要用一种特殊的内容文件(.svc文件)表示它。这种模型和ASMX页面在IIS中的表示方法类似。.svc文件包含一个WCF专用的处理指示符(@ServiceHost),这个指示符告诉WCF运行库在收到消息时激活服务。 1. 在Solution Explorer中右键单击DerivativesCalculatorService项目并选择Add | New Item菜单项。 2. 在Add New Item对话框中,选择Text File模板。 wordend 相关阅读: 3. 在Name文本框中输入Service.svc。 4. Add New Item对话框看起来应该如图所示。 添加一个svc文件 5. 单击Add按钮。 6. 在Service.svc文件中添加下面这行语句。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/ <%@ServiceHost Service="DerivativesCalculatorService.Calculator" […]
View Details