解决方案:

1. 在目标服务器上发布webservice,实现文件下载的方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.IO;
using System.Data; namespace TRNWebService
{
/// <summary>
/// FileHelperService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class FileHelperService : System.Web.Services.WebService
{ /// <summary>
/// 从指定文件夹下获取文件
/// </summary>
/// <param name="dicpath"></param>
/// <returns></returns>
[WebMethod(EnableSession = true, Description = "获取文件夹下面的文件")]
public DataTable GetFileList(string dicpath)
{
DataTable dt = new DataTable();
dt.TableName = "AEFiles";
dt.Columns.Add("fileName", typeof(string));
dt.Columns.Add("filePath", typeof(string)); DirectoryInfo dir = System.IO.Directory.CreateDirectory(dicpath);
if (dir == null)
{
return null;
}
FileInfo[] files = dir.GetFiles();
for (int i = ; i < files.Length; i++)
{
FileInfo file = files[i] as FileInfo;
if (file != null)
{
dt.Rows.Add(file.Name, file.FullName);
}
} return dt; } [WebMethod(Description = "下载服务器站点文件,传递文件相对路径")]
public byte[] DownloadFile(string strFilePath)
{
FileStream fs = null;
//string CurrentUploadFolderPath = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["UploadFileFolder"]);
//string CurrentUploadFilePath = CurrentUploadFolderPath + strFilePath;
string CurrentUploadFilePath = strFilePath;
if (File.Exists(CurrentUploadFilePath))
{
try
{
///打开现有文件以进行读取。
fs = File.OpenRead(CurrentUploadFilePath);
int b1;
System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
while ((b1 = fs.ReadByte()) != -)
{
tempStream.WriteByte(((byte)b1));
}
return tempStream.ToArray();
}
catch (Exception ex)
{
return new byte[];
}
finally
{
fs.Close();
}
}
else
{
return new byte[];
}
}
}
}

webservice 下载文件

2. 客户端利用反射实现webservice,把文件下载到本地的安装目录

3. 客户端打开已经存放在本地的文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.CodeDom.Compiler;
using System.Net;
using System.IO;
using Microsoft.CSharp;
using System.CodeDom;
using System.Web.Services.Description; namespace Frm.Common
{
public static class WebServiceInvoke
{
#region InvokeWebService
//动态调用web服务
public static object InvokeWebService(string url, string methodname, object[] args)
{
return InvokeWebService(url, null, methodname, args);
} public static object InvokeWebService(string url, string classname, string methodname, object[] args)
{
string @namespace = "TRNWebService";
if ((classname == null) || (classname == ""))
{
classname = GetWsClassName(url);
} try
{
//获取WSDL
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url + "?WSDL");
ServiceDescription sd = ServiceDescription.Read(stream);
ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
sdi.AddServiceDescription(sd, "", "");
CodeNamespace cn = new CodeNamespace(@namespace); //生成客户端代理类代码
CodeCompileUnit ccu = new CodeCompileUnit();
ccu.Namespaces.Add(cn);
sdi.Import(cn, ccu);
CSharpCodeProvider csc = new CSharpCodeProvider();
ICodeCompiler icc = csc.CreateCompiler(); //设定编译参数
CompilerParameters cplist = new CompilerParameters();
cplist.GenerateExecutable = false;
cplist.GenerateInMemory = true;
cplist.ReferencedAssemblies.Add("System.dll");
cplist.ReferencedAssemblies.Add("System.XML.dll");
cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
cplist.ReferencedAssemblies.Add("System.Data.dll"); //编译代理类
CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
if (true == cr.Errors.HasErrors)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
{
sb.Append(ce.ToString());
sb.Append(System.Environment.NewLine);
}
throw new Exception(sb.ToString());
} //生成代理实例,并调用方法
System.Reflection.Assembly assembly = cr.CompiledAssembly;
Type t = assembly.GetType(@namespace + "." + classname, true, true);
object obj = Activator.CreateInstance(t);
System.Reflection.MethodInfo mi = t.GetMethod(methodname); return mi.Invoke(obj, args);
}
catch (Exception ex)
{
throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
}
} private static string GetWsClassName(string wsUrl)
{
string[] parts = wsUrl.Split('/');
string[] pps = parts[parts.Length - ].Split('.'); return pps[];
}
#endregion
}
}

c# 利用反射实现动态webservice

 /// <summary>
/// 通过WebService下载文件
/// </summary>
/// <param name="ServiceFilePath">服务器图片路径</param>
/// <param name="DownloadFolderPath">本地图片路径</param>
private string DownloadFile(string ServiceFilePath, string DownloadFolderPath)
{
try
{
string DownloadFileName = "";
if (ServiceFilePath.Contains("/"))
{
DownloadFileName = ServiceFilePath.Substring(ServiceFilePath.LastIndexOf("/"));
}
else if (ServiceFilePath.Contains("\\"))
{
DownloadFileName = ServiceFilePath.Substring(ServiceFilePath.LastIndexOf("\\")+);
}
else
{
DownloadFileName = ServiceFilePath;
} string DownloadFilePath = DownloadFolderPath + "\\" + DownloadFileName; Dictionary<string, string> dicSystem = Common.AppConfigSys.AppConfigDic;
string strUrl = dicSystem["webserviceURL"];//webservice的发布位置(http://192.168.10.3:8084/FileHelperService.asmx)
object[] objPara = new object[];
objPara[] = ServiceFilePath;
object objFile = Frm.Common.WebServiceInvoke.InvokeWebService(strUrl, "DownloadFile", objPara); byte[] bytes = (byte[])objFile;
if (bytes != null)
{
if (!Directory.Exists(DownloadFolderPath))
{
Directory.CreateDirectory(DownloadFolderPath);
}
if (!File.Exists(DownloadFilePath))
{
File.Create(DownloadFilePath).Dispose();
}
//如果不存在完整的上传路径就创建
FileInfo downloadInfo = new FileInfo(DownloadFilePath);
if (downloadInfo.IsReadOnly) { downloadInfo.IsReadOnly = false; }
//定义并实例化一个内存流,以存放提交上来的字节数组。
MemoryStream ms = new MemoryStream(bytes);
//定义实际文件对象,保存上载的文件。
FileStream fs = new FileStream(DownloadFilePath, FileMode.Create);
///把内内存里的数据写入物理文件
ms.WriteTo(fs);
fs.Flush();
ms.Flush();
ms.Close();
fs.Close();
fs = null;
ms = null;
}
return DownloadFilePath;
}
catch (Exception ex)
{
return "";
}
}

客户端文件下载方法

  void AElink_Click(object sender, EventArgs e)
{ LinkLabel link = sender as LinkLabel;
string serverfilePath = link.Tag.ToString();//服务器上的文件地址 string clientfilePath = DownloadFile(serverfilePath, Application.StartupPath + "\\UploadFileFolder");//客户端的文件地址
System.Diagnostics.Process.Start(clientfilePath);//打开本地文件 }

文件下载方法调用

winform 查看远程服务器上的文件的更多相关文章

  1. xshell终端向远程服务器上传文件方法

    centos-7下在本地终端里向远程服务器上传文件,在命令行中执行的软件. 安装命令如下: 在终端里输入如下命令: 会弹出如下窗口 选择你要上传的文件即可上传成功.

  2. Python: 如何判断远程服务器上Excel文件是否被人打开

    最近工作中需要去判断远程服务器上的某个Excel文件是否被打开,如果被人打开,则等待,如果没人打开使用,则去填写数据进Excel文件. 开始想的很简单,和其他语言一样,比如C#,打开文件,如果报错说明 ...

  3. php curl向远程服务器上传文件

    <?php /** * test.php: */ header('content-type:text/html;charset=utf8'); $ch = curl_init(); //加@符号 ...

  4. 模拟php curl向远程服务器上传文件

    test.php <?php header('content-type:text/html;charset=utf8'); $file = dirname(__FILE__).'/1.jpg'; ...

  5. Mac安装SSHFS挂载远程服务器上的文件夹到本地

    一.安装SSHFUS sshfs依赖于fuse,所以需要先安装fuse,这两个软件都可以在https://osxfuse.github.io/下载到. 注意安装顺序. 二.挂载文件夹到本地 输入一下命 ...

  6. php访问远程服务器上的文件

    test.php <?php $fp=fopen('http://www.baidu.com', 'r'); while (!feof($fp)) { $chunk=fgets($fp); ec ...

  7. 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器

    引入: 在我们昨天架设好了Samba服务器上并且创建了一个 Samba 账户后,我们就迫不及待的想用JAVA去操作Samba服务器了,我们找到了一个框架叫 jcifs,可以高效的完成我们工作. 实践: ...

  8. 利用SSH在本机和远程服务器之间传输文件或文件夹

    1.从远程服务器上下载文件到本机 scp <服务器用户名>@<服务器地址>:<服务器中要下载的文件路径> <下载到本机的绝对路径> 2.从本机上传本地文 ...

  9. scp 从远程服务器上一下载文件

    scp -P202 xx3.x6.xx.xx:/usr/local/zookeeper-.zip /tmp #指定远程服务器的端口和远程服务器的目标文件 ,最后指定要下载到本的地目录 也可以从远程服务 ...

随机推荐

  1. Linux 设备驱动--- 并发 与 竞态 --- atomic_t --- atomic_dec_and_test --- 原子操作

    并发: 多个执行单元同时被执行. 竞态: 并发的执行单元对资源 ( 硬件资源和软件上的全局变量等 ) 的访问导致的竞争状态. 并发的处理: 处理并发的常用技术是加锁或者互斥,即保证在任何时间只有一个执 ...

  2. DXR

    https://github.com/ConfettiFX/The-Forge/blob/master/CommonRaytracing_3/ThirdParty/DXR/doc/D3D12%20Ra ...

  3. (转)Android技术积累:图片缓存管理

    如果每次加载同一张图片都要从网络获取,那代价实在太大了.所以同一张图片只要从网络获取一次就够了,然后在本地缓存起来,之后加载同一张图片时就从缓存中加载就可以了.从内存缓存读取图片是最快的,但是因为内存 ...

  4. Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串

    写在开头: 最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百 ...

  5. Md5Hash的测试

    import org.apache.shiro.crypto.hash.Md5Hash; public static void main(String[] args) { /** * source 要 ...

  6. js怎么获取图片的相对地址

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  7. Windows内存管理

    本博文很大程度上参考了,潘爱民先生的<Windows内核原理与实现>一书,在此对他表示感谢. 记得是在学C语言指针的时候,首次比较实际的使用内存寻址.也是在那个时候知道不能使用未初始化的指 ...

  8. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何添加自定义Task,如何让程序的一部分拥有不同的执行周期

    右击Tasks,添加一个新的Task,可以设置这个新的任务的扫描周期,比如100ms   右击PLC的整个的Project,然后Add一个Referenced Task,选中你新建的Task   在P ...

  9. $(document).ready()方法和window.onload()方法

    $(document).ready()方法和window.onload()方法 $(document).ready()方法是JQuery中的方法,他在DOM完全就需时就可以被调用,不必等待这些元素关联 ...

  10. 《Linux内核设计与实现》笔记-1-linux内核简单介绍

    一.Linux内核相对于传统的UNIX内核的比較: (1):Linux支持动态内核模块. 虽然Linux内核也是总体式结构,但是同意在须要的时候动态哦卸除(rmmod xxx)和载入内核模块(insm ...