客户端调webservice无法用pscp工具传送文件到远程linux服务器

先说下现象:

用.net做了个webservice,功能是从iis发布机器传文件到远程linux,大概的实现过程是new一个process,执行batch文件,在batch文件里的命令是用pscp工具传送本地文件到linux机器的指定目录下,执行的过程中程序会打开cmd. exe和pscp.exe两个进程,开发工具是vs2005,直接F5运行,没有问题;发布到win server 2003上后,写个客户端调用,发现不能连远端服务器了,文件传不过去了。

 

原因:

webservice在开发环境可以连上远程服务器,通过client调却不能,这是因为两种方式开启的cmd进程和pscp进程的用户不同造成的。大家都知道用putty第一次登录远服时,会有个窗口跳出来,让你把远程服务器的指纹密钥保存到注册表,点yes就是保存了。前一种方式用户就是当前登录用户,该用户我之前已经用putty工具登录过远程服务器,所以已经有远服的指纹密钥保存在注册表里,就是这个指纹密钥决定了改用户是否能通过pscp工具连接远服。后一种方式的用户,如果webservice发布在win 2003 server,则该用户是network service,该用户没有指纹密钥保存在注册表,所以连不上。
目前有两种解决办法:
1 新建一个应用程序池,打开该池的属性,到identity的tab页,选中configurable(我是英文os,所以就写英文了,想知道中文表达,去金山里查吧),输入一个已经保存了指纹密钥的用户(就是手工打开putty登录过远服),保存设置,在把这个应用程序池应用到你的网站上(你的网站-属性-虚拟目录-应用程序池)。需要注意的是,应用程序池里选的用户必须也要经过设置有权限的用户才行,以下是设置方法,直接复制网上的英文了,不翻译了(实际操作中,我把改用户加入到administrator用户组,没有做下面三步,注意设置程序池里的用户名时要机器名或者域名\用户名)
Adding the user account to the IIS_WPG group of the server 
Assign to this account two user rights to start CGI processes: Adjust memory quotas for a process and Replace a process level token. 
Give the IIS_WPG group Read & Execute, List Folder Contents, and Read permissions to the Web site directories
重启iis后应该就可以了。

2 修改注册表,到IKEY_USERS下找到已经登录过的用户,Software-SimonTatham,看看下面是否有关于登录过的远服的信息,导出SimonTatham到本地保存成reg文件。找到IKEY_USERS下network service(win 2003 server的iis默认用这个用户)或者ASPNET(win xp的iis默认用这个用户)用户,编辑导出的那个reg文件,根据你实际用哪个用户修改路径,然后再注册表窗口导入,就可以了。

你可能感兴趣的:(应用服务器,linux,webservice,XP,IIS)