var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2009年09月25日

    Asp.net配合Windows Service和WebService的使用

    分类:

    .NET中如何引用服务程序中给出了一种引用方式,除此之外还可以直接包含该Service类定义的文件来引用,这种方法生成的文件更小。但以上仅仅解决了类调用的问题,并未给出通讯解决方案。要想使得Service可控,可以用RPC.NET中的Remoting或者WebService,注意Remoting性能比WebService更出众,见Performance Comparison: .NET Remoting vs. ASP.NET Web ServicesASP.NET Web Services or .NET Remoting: How to Choose

     

    Asp.net中以“Integrated Security=True”和“Trusted_Connection=True”链接MSSQL Server是集成验证,即用Windows验证方式去访问数据库,所以就无需用户名和密码了。若网站服务需要一个指定非用户账号以此方式访问数据库,可以在IISApplication Pools中新建一个apppool,右键点击其属性(Properties)>Identity选项窗口Configurable中设置该账号,最重要的是该账户必须属于IIS_WPG组,并且有“Log on as a service”权限(gpedit.msc->Computer Configuration->Windows Settings->Security Settings->Local Policies->User Rights Assignment),如果需要匿名访问这个网站服务则在IISWeb Sitesapppool所对应网站目录右键点击其属性(Properties)->Directory Security->Authentication and access control->Edit,勾选的Enable anonymous access下填入该账号,详见Application Pool"Service Unavailable"

     

    当我们需要在其它地方引用WebService时,Disco.exe是一个不错的包裹器。假如webserviceurlhttp://localhost/websevice/webservice.asmx,运行disco.exe http://localhost/websevice/webservice.asmx生成results.discomapwebsevice.discowebsevice.wsdl,将这三个文件作为Web Reference添加;或者自动生成引用,直接在需要引用的项目右键点击“Add Web Reference”输入url即可。.net中的WebService支持三种协议:http posthttp getsoap,默认开启soap协议,这也就是为何通过浏览器无法运行而能通过添加引用在其它项目中运行WebService的原因,解决方案见KB 819267

    分享到:

    历史上的今天:

    Padding Oracle安全漏洞 2010年09月25日
    UAC in Windows Vista 2006年09月25日