我有一个包含此方法的网络服务:
[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 - 我喜欢这里的文本格式化:)
答案 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)
答案 3 :(得分:-1)