Tengo 3 servicios web agregados a las referencias de servicio en una biblioteca de clase. (Este es un proyecto de muestra para uso de API) Necesito moverlos a mi proyecto pero no puedo agregar las referencias de servicio debido a los problemas de seguridad (Por cuestiones de seguridad, me refiero a que el servicio solo responde a una dirección IP y esa es la dirección IP del servidor de nuestro cliente). ¿Hay alguna forma de generar una clase como usar "Ildasm.exe" para ese servicio web particaluar?Servicio web sin agregar una referencia?
Respuesta
No es necesario añadir una referencia de servicio web para jugar con el código de servicio web: Puede generar manualmente clase para jugar con, por ejemplo:
/out:d:/Proxy.cs Wsdl.exe/fin http://localhost:2178/Services.asmx
Y luego puede agregar este archivo manualmente a su proyecto.
Batirme :) Para fines de referencia -> http://msdn.microsoft.com/en-us/library/ms155134.aspx – SeanCocteau
Sugiero buscar en svcutil.exe –
Puede usar esta clase. No recuerdo dónde encontré el código básico, agregué algunos métodos y convertí a clase antes.
public class WebService
{
public string Url { get; set; }
public string MethodName { get; set; }
public Dictionary<string, string> Params = new Dictionary<string, string>();
public XDocument ResultXML;
public string ResultString;
public WebService()
{
}
public WebService(string url, string methodName)
{
Url = url;
MethodName = methodName;
}
/// <summary>
/// Invokes service
/// </summary>
public void Invoke()
{
Invoke(true);
}
/// <summary>
/// Invokes service
/// </summary>
/// <param name="encode">Added parameters will encode? (default: true)</param>
public void Invoke(bool encode)
{
string soapStr =
@"<?xml version=""1.0"" encoding=""utf-8""?>
<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns:xsd=""http://www.w3.org/2001/XMLSchema""
xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
<soap:Body>
<{0} xmlns=""http://tempuri.org/"">
{1}
</{0}>
</soap:Body>
</soap:Envelope>";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url);
req.Headers.Add("SOAPAction", "\"http://tempuri.org/" + MethodName + "\"");
req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
using (Stream stm = req.GetRequestStream())
{
string postValues = "";
foreach (var param in Params)
{
if (encode)
postValues += string.Format("<{0}>{1}</{0}>", HttpUtility.UrlEncode(param.Key), HttpUtility.UrlEncode(param.Value));
else
postValues += string.Format("<{0}>{1}</{0}>", param.Key, param.Value);
}
soapStr = string.Format(soapStr, MethodName, postValues);
using (StreamWriter stmw = new StreamWriter(stm))
{
stmw.Write(soapStr);
}
}
using (StreamReader responseReader = new StreamReader(req.GetResponse().GetResponseStream()))
{
string result = responseReader.ReadToEnd();
ResultXML = XDocument.Parse(result);
ResultString = result;
}
}
}
Y puede utilizar como esto
WebService ws = new WebService("service_url", "method_name");
ws.Params.Add("param1", "value_1");
ws.Params.Add("param2", "value_2");
ws.Invoke();
// you can get result ws.ResultXML or ws.ResultString
¿Es posible llamar al método web api para usar esto? ¿Invocar método? – altandogan
Comparta sus ideas sobre http://stackoverflow.com/questions/40394297/consume-web-service-dynamically-using-httpwebrequest-without-service-reference –
Sí si no desea añadir una referencia wsdl.exe /out:d:/Proxy.cs /order
sería la alternativa
Usted puede cambiar dinámicamente el URL de una referencia de servicio:
var service = new MyService.MyWSSoapClient();
service.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://localhost:8080/");
Aquí hay un ejemplo de cómo llamar a un servicio web "GET" desde su código C# :
public string CallWebService(string URL)
{
HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(URL);
objRequest.Method = "GET";
objRequest.KeepAlive = false;
HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
string result = "";
using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
{
result = sr.ReadToEnd();
sr.Close();
}
return result;
}
Simplemente páselo por una URL, y devolverá una cadena que contenga la respuesta. A partir de ahí, se puede llamar a la función "DeserializeObject
" JSON.Net para convertir la cadena en algo útil:
string JSONresponse = CallWebService("http://www.inorthwind.com/Service1.svc/getAllCustomers");
List<Customer> customers = JsonConvert.DeserializeObject<List<Customer>>(JSONresponse);
Espero que esto ayude.
- 1. Cómo agregar una referencia de servicio web en una DLL
- 2. Visual Studio/SOAP - 'Agregar referencia de servicio' frente a 'Agregar referencia de servicio web'
- 3. Referencia Web vs. Servicio Referencia
- 4. ¿Cómo generar una referencia de servicio web sin INotifyPropertyChanged?
- 5. Agregar referencia de servicio no genera proxy
- 6. agregar una referencia de servicio web a una aplicación de consola
- 7. Agregue referencia de servicio al servicio ASP.NET Web API
- 8. HTTP 400 Error de solicitud incorrecta al intentar agregar una referencia web al servicio WCF
- 9. ¿Qué archivos necesito registrar después de agregar una referencia de servicio web?
- 10. ¿Puedo agregar una referencia de servicio con netTcpBinding en WCF?
- 11. ¿Debo disponer de una referencia de servicio web en ASP.NET?
- 12. ¿Diferencia entre referencia web y referencia de servicio?
- 13. ¿Cuál es la diferencia entre una referencia web y una referencia de servicio?
- 14. Falta la referencia de servicio de complemento VS2010 (no se puede agregar la referencia de servicio)
- 15. Consuma un servicio web SOAP sin depender de la aplicación.config
- 16. Falta la opción Agregar referencia web en VS2008
- 17. Problema al agregar una referencia de servicio al servicio WCF alojado en IIS Express con SSL
- 18. Incluyendo una referencia de servicio de una biblioteca de clase
- 19. Programación contra WSDL sin acceso al servicio web real
- 20. .Net - Servicio web de consumo sin WSDL
- 21. ¿Cómo crear proxy de cliente sin svcutil o agregar referencia de servicio en wcf?
- 22. Visual Studio 2010: agregar una referencia de servicio a un wsdl generado en 2008
- 23. Agregar referencia de servicio genera contratos de mensaje
- 24. Cómo agregar la referencia de servicio en Visual Studio 2008 autenticarse contra el servicio web protegido con contraseña
- 25. Implementar el servicio web java sin usar el servidor web
- 26. "Reutilizar tipos existentes" se ignora al agregar una referencia de servicio
- 27. ¿Cómo puedo cambiar dinámicamente las direcciones del servicio web en .NET sin una recompilación?
- 28. Cualquier referencia al servicio web de tiempo de Internet gratuito
- 29. Cómo agregar una referencia a System.Numerics.dll
- 30. ¿Cómo crear un servicio web sin un archivo ASMX?
Si el servicio solo responde a determinadas direcciones IP, ¿cómo piensa probar su código? Mi sugerencia sería obtener el WSDL del servicio del propietario del mismo y usted debería poder ejecutar svcutil en él para generar las clases para interactuar con él. – Rich