servicio - soap c#
¿Cómo llamar a un método de servicio web? (4)
En Visual Studio, use la función "Agregar referencia web" y luego ingrese la URL de su servicio web.
Al agregar una referencia a la DLL, no hace referencia a ella como un servicio web, sino simplemente como un ensamblado.
Cuando agrega una referencia web, crea una clase proxy en su proyecto que tiene los mismos métodos o argumentos similares a los de su servicio web. Esa clase proxy se comunica con su servicio web a través de SOAP, pero oculta todo el protocolo de comunicaciones para que no tenga que preocuparse por ello.
Tengo un servicio web que contiene este método:
[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;
}
Esto devuelve una lista de nombres de archivos en una carpeta. Cuando depuro la aplicación, funciona bien.
Lo que quiero hacer es llamar a este método de servicio web desde una aplicación winform. Agregué una referencia al .dll del servicio web, y así es como llamo al método anterior:
private void Form1_Load(object sender, EventArgs e)
{
List<string> files = TestUploaderWebService.Service1.GetFileListOnWebServer();
}
El código anterior no funciona: cuando ingresa al método, la ruta de la aplicación web es nula y muchas propiedades de la clase HostingEnvironment también son nulas. ¿Dónde está mi error al tratar de llamar a un método de servicio web desde otra aplicación winform?
Tenga en cuenta que el servicio web está hecho en Visual Web Developer Express, y el winform en Visual C # express; Es por eso que tuve que agregar el dll del servicio web como referencia en la aplicación winform. No tengo Visual Studio completo, lo que me hubiera permitido una solución única para ambos proyectos.
Soy nuevo en los servicios web.
PD: me encanta el formato del texto sobre la marcha aquí :)
La forma actual de hacerlo es mediante el uso del comando "Agregar referencia de servicio". Si especifica " TestUploaderWebService
" como el nombre de referencia del servicio, generará el tipo TestUploaderWebService.Service1
. Esa clase tendrá un método llamado GetFileListOnWebServer
, que devolverá una matriz de cadenas (puede cambiar eso para que sea una lista de cadenas si lo desea). Lo usarías así:
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();
}
}
PD Dígale a su instructor que mire " Microsoft: los servicios web de ASMX son una" tecnología heredada " ", y pregunte por qué está enseñando tecnología desactualizada.
La respuesta de James es correcta, por supuesto, pero debo recordarle que todo el asunto ASMX es, si no obsoleto, al menos no el método actual. Sugiero encarecidamente que estudie WCF, aunque solo sea para evitar aprender cosas que deberá olvidar.