- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我制作了一个小型测试应用程序 (WinForms C#) 来测试 FTP 上传。这非常有效。
我尝试在我当前正在处理的 Windows 服务中使用完全相同的方法,但我得到“(426) 连接已关闭;传输中止。'-消息。
我已经多次确认该方法的参数完全相同。他们是!接下来想到的是我的服务运行的帐户,但我已经尝试了所有可能性,甚至以“用户”身份运行服务,提供我自己的凭据。那么它应该像 WinForms 应用程序一样运行,对吗?不,它没有!
它一直运行良好,直到 using (var requestStream = request.GetRequestStream())
行出现故障。
有问题的 FTP 服务器只允许事件连接,因此 request.UsePassive 设置为 false。
有人知道吗?
public void UploadToFtp(string url, string filePath, string username, string password, bool mode)
{
var fileName = Path.GetFileName(filePath);
var request = (FtpWebRequest)WebRequest.Create(url + fileName);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = !mode;
request.UseBinary = true;
request.KeepAlive = false;
using (var fileStream = File.OpenRead(filePath))
{
using (var requestStream = request.GetRequestStream())
{
fileStream.CopyTo(requestStream);
requestStream.Close();
}
}
var response = (FtpWebResponse)request.GetResponse();
response.Close();
}
添加两种场景的跟踪日志:
WebRequest::Create(ftp://someurl/somefile.txt)
FtpWebRequest#63289421::.ctor(ftp://someurl/somefile.txt)
Exiting WebRequest::Create() -> FtpWebRequest#63289421
Current OS installation type is 'Client'.
RAS supported: True
ServicePoint#14173886::ServicePoint(someurl:21)
FtpWebRequest#63289421::GetRequestStream()
FtpWebRequest#63289421::GetRequestStream(Method=STOR.)
FtpControlStream#22525719 - Created connection from 10.10.10.103:1865 to nnn.nnn.nnn.nnn:21.
Associating FtpWebRequest#63289421 with FtpControlStream#22525719
FtpControlStream#22525719 - Received response [xxxx
someurl>PROD server
Port21>Use active mode>
xxxx]
Sending command [USER myusername]
Received response [331 Enter password]
Sending command [PASS ********]
Received response [230-User logged in
Hi,I'am datagear PROD.
230 User logged in]
Sending command [OPTS utf8 on]
Received response [200 Command OPTS succeed]
Sending command [PWD]
Received response [257 "/CitData" is current directory]
Sending command [TYPE I]
Received response [200 Transfer mode set to BINARY]
Sending command [PORT 10,10,10,103,7,74]
Received response [200 Command PORT succeed]
Sending command [STOR somefile.txt]
Received response [150 Uploading in BINARY file somefile.txt]
Exiting FtpWebRequest#63289421::GetRequestStream()
Received response [226 Transfer completed]
Sending command [QUIT]
Received response [221-bye
Bye-Bye,see you again.
WebRequest::Create(ftp://someurl/somefile.txt)
FtpWebRequest#63289421::.ctor(ftp://someurl/somefile.txt)
Exiting WebRequest::Create() -> FtpWebRequest#25425822
Current OS installation type is 'Client'.
ServicePoint#31665793::ServicePoint(someurl:21)
FtpWebRequest#25425822::GetRequestStream()
FtpWebRequest#25425822::GetRequestStream(Method=STOR.)
FtpControlStream#51484875 - Created connection from 10.10.10.103:1759 to nnn.nnn.nnn.nnn:21.
Associating FtpWebRequest#25425822 with FtpControlStream#51484875
FtpControlStream#51484875 - Received response [xxxx
someurl>PROD server
Port21>Use active mode>
xxxx]
Sending command [USER myusername]
Received response [331 Enter password]
Sending command [PASS ********]
Received response [230-User logged in
Hi,I'am datagear PROD.
230 User logged in]
Sending command [OPTS utf8 on]
Received response [200 Command OPTS succeed]
Sending command [PWD]
Received response [257 "/CitData" is current directory]
Sending command [TYPE I]
Received response [200 Transfer mode set to BINARY]
Sending command [PORT 10,10,10,103,6,224]
Received response [200 Command PORT succeed]
Sending command [STOR somefile.txt]
Received response [426 Transfer failed]
(Releasing FTP connection#51484875.)
GetRequestStream - The remote server returned an error: (426) Connection closed; transfer aborted..
at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
at System.Net.CommandStream.Dispose(Boolean disposing)
at System.IO.Stream.Close()
at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
at System.Net.FtpWebRequest.GetRequestStream()
Exiting FtpWebRequest#25425822::GetRequestStream()
有效的有一行内容为“RAS Supported”。也许有趣,不知道。
最佳答案
Windows 防火墙导致了问题。从 WinService 运行时,我必须为此服务打开防火墙。当从 VS 环境运行时,防火墙似乎已经为 VS 打开(尽管 WinFirewall 中的直通应用程序列表没有显示)因此一切似乎都运行良好。
关于c# - 从 WinService 上传 FTP 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35340611/
我有一个 Windows 服务类(继承自 ServiceBase),它在构建时提供了一个对象列表。每个操作描述一个 DoWork() 虚方法。 Service 类的要点是管理所有底层操作,在运行时将它
我用谷歌搜索了 this one 但是当我尝试应用它时出现错误。所以安装/卸载工作正常,但服务本身没有启动,超时后它说服务没有响应。我不知道为什么。当我附加到进程时,它甚至不会进入 Main() 方法
如何在 Windows 7 中设置剪贴板监视器。主要是我们希望从 Windows 服务而不是普通应用程序设置监视器。 最佳答案 这很可能是不可能的,因为服务将运行在与交互登录用户不同的 WindowS
目前我们在 Windows 启动时在 LocalService 用户下启动了 .NET WinService。该服务使用 Process.Start() 启动另一个 WinForms 应用程序。 但是
我一直在开发 WinService 应用程序并使用 WinForms 应用程序测试方法和功能。 我有一个解决方案,两个应用程序都在同一个解决方案下。应用程序逻辑和方法在公共(public)类和方法下的
我制作了一个小型测试应用程序 (WinForms C#) 来测试 FTP 上传。这非常有效。 我尝试在我当前正在处理的 Windows 服务中使用完全相同的方法,但我得到“(426) 连接已关闭;传输
我有 win 服务,它必须通过 URL 下载所有 zip 文件(例如 http://download.geonames.org/export/dump/ )但是当我使用 Directory.GetFi
我们有一个应用程序,它部分是标准 EXE,部分是 WinService EXE。标准 EXE 由注册表的“运行”部分生成,并在登录时根据刚刚登录的用户的凭据生效。WinService EXE 设置为“
我的程序集(服务)是为在 WinForms 上下文中使用而开发的。因此,如果某处出现问题,我的 dll 将显示错误形式和相应的消息。 但现在我要使用它。代码非常陈旧和肮脏,这就是为什么我不想使用模式方
我有一个 DLL Com 服务器,实际上只被一个旧的 Delphi exe 应用程序使用。 COM 服务器是多年前(不是我)用 C++ ATL 编写的。它实现回调(事件 - 是否相同?) - 使用传出
我是一名优秀的程序员,十分优秀!