如何调用Web服务方法?

时间:2009-08-03 21:12:23

标签: c# winforms web-services

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

[WebMethod]
public static List<string> GetFileListOnWebServer()
{
   DirectoryInfo dInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/UploadedFiles/"));
   FileInfo[] fInfo = dInfo.GetFiles("*.*", SearchOption.TopDirectoryOnly);

   List<string> listFilenames = new List<string>(fInfo.Length);

   for(int i = 0; i < fInfo.Length; i++)
   {
        listFilenames.Add(fInfo[i].Name);
   }

   return listFilenames;
}

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

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

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

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

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

我是网络服务新手。

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

4 个答案:

答案 0 :(得分:19)

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

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

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

答案 1 :(得分:10)

目前的方法是使用“添加服务引用”命令。如果您指定“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();
    }
}

P.S。告诉你的老师看看“Microsoft: ASMX Web Services are a “Legacy Technology””,并问他为什么教授过时的技术。

答案 2 :(得分:1)

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

答案 3 :(得分:-1)

在第一个方法

中写return(secondmethod)

enter image description here