如何调用Web服务方法?

我有一个包含此方法的Web服务:

[WebMethod] public static List GetFileListOnWebServer() { DirectoryInfo dInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/UploadedFiles/")); FileInfo[] fInfo = dInfo.GetFiles("*.*", SearchOption.TopDirectoryOnly); List listFilenames = new List(fInfo.Length); for(int i = 0; i < fInfo.Length; i++) { listFilenames.Add(fInfo[i].Name); } return listFilenames; } 

这将返回文件夹中的文件名列表。 当我调试应用程序时,它工作正常。

我想要做的是从winform应用程序调用这个webservice方法。 我添加了对web服务的.dll的引用,这就是我调用上面方法的方法:

 private void Form1_Load(object sender, EventArgs e) { List files = TestUploaderWebService.Service1.GetFileListOnWebServer(); } 

上面的代码不起作用 – 当它进入方法时,Web应用程序的路径为空,HostingEnvironment类的许多属性也为null。 在尝试从另一个winform应用程序调用Web服务方法时,我的错误在哪里?

请注意,Web服务是在Visual Web Developer Express中创建的,而win C#表示的是winform; 这就是我必须在winform应用程序中添加Web服务dll作为参考的原因。 我没有完整的Visual Studio,这将为我提供两个项目的单一解决方案。

我是网络服务的新手。

PS – 我喜欢这里的文本格式:)

在visual studio中,使用“添加Web引用”function,然后输入Web服务的URL。

通过添加对DLL的引用,您不能将其引用为Web服务,而只是作为程序集引用。

添加Web引用时,它会在项目中创建一个代理类,该代理类具有与Web服务相同或相似的方法/参数。 该代理类通过SOAP与您的Web服务进行通信,但隐藏了所有通信协议内容,因此您不必担心它。

目前的方法是使用“添加服务引用”命令。 如果指定“ TestUploaderWebService ”作为服务引用名称,那么将生成类型TestUploaderWebService.Service1 。 该类将有一个名为GetFileListOnWebServer的方法,该方法将返回一个字符串数组(如果您愿意,可以将其更改为字符串列表)。 你会像这样使用它:

 string[] files = null; TestUploaderWebService.Service1 proxy = null; bool success = false; try { proxy = new TestUploaderWebService.Service1(); files = proxy.GetFileListOnWebServer(); proxy.Close(); success = true; } finally { if (!success) { proxy.Abort(); } } 

PS告诉你的导师看看“ 微软:ASMX Web服务是一种”遗留技术“ ”,并问他为什么要教授过时的技术。

当然,詹姆斯的答案是正确的,但我应该提醒你,整个ASMX的东西,如果不是过时的话,至少不是当前的方法。 我强烈建议你研究一下WCF,如果只是为了避免学习你需要忘记的东西。

在第一个方法中写入return(secondmethod)

在此处输入图像描述