c# - 如何调用 Web 服务方法?

标签 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 应用程序调用此 webservice 方法。我添加了对 web 服务的 .dll 的引用,这就是我调用上述方法的方式:

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

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

请注意,Web 服务是在 Visual Web Developer Express 中创建的,而 winform 是在 Visual C# express 中创建的;这就是为什么我必须在 winform 应用程序中添加 Web 服务 dll 作为引用。我没有完整的 Visual Studio,这将允许我使用一个解决方案来处理两个项目。

我是网络服务的新手。

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

最佳答案

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

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

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

关于c# - 如何调用 Web 服务方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224672/

相关文章:

c# - 从另一个线程更新标签

c# - 如果使用 C# 的内容长度 > 7kb,则无法在 WebRequest 上发布

java - 如何在 SOAP 请求中设置字符编码

c# - 如何检查泛型是否有运算符? C#

c# - C# 中窗体的 Control 属性中的控件顺序

c# - 如何找到在 C# 中抛出的异常的异常类型?

c# - 如何从C#中的组合框获取值(value)?

java - Axis Web 服务客户端错误

c# - 在代码隐藏中以编程方式更改资源文件语言 (resx)

c# - Entity Framework 中多重继承的替代方案