Ben. 3 web hizmetleri bir sınıf kitaplığı hizmet referanslarına eklenen (Bu, bir API kullanımı için örnek bir projedir) Ben Projemi içine bu hareket etmek gerekir ama (çünkü güvenlik sorunlarının servis başvuruları ekleyemezsiniz Güvenlik sorunları ile hizmet sadece bir ip adresine cevap veriyor ve bu da müşterimizin sunucusunun ip adresi anlamına geliyor.) Bu particaluar web hizmeti için "Ildasm.exe" kullanarak bir sınıf oluşturmanın bir yolu var mı?Web Servisi bir referans eklemeden mi?
cevap
Sen web hizmeti koduyla oynamak için web hizmeti başvuru eklemek gerekmez:
wsdl.exe /out:d:/Proxy.cs/düzen: Manuel olarak örneğin oynamak için sınıf oluşturabilir http://localhost:2178/Services.asmx
Ve sonra projenize elle dosyayı ekleyebilirsiniz.
Beni dövün :) Referans amaçlı -> http://msdn.microsoft.com/en-us/library/ms155134.aspx – SeanCocteau
Svcutil.exe dosyasına bakmanızı öneririz –
Bu sınıfı kullanabilirsiniz. Temel kodu nerede bulduğumu hatırlamadım, bazı yöntemleri ekledim ve daha önce sınıfa geçtim.
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;
}
}
}
Ve bu
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
Bunu kullanmak için web API yöntemini çağırmak mümkün mü? Yöntemini çağırmak? – altandogan
Lütfen düşüncelerinizi http://stackoverflow.com/questions/40394297/consume-web-service-dynamically-using-httpwebrequest-without-service-reference adresinde paylaşın –
gibi kullanabilirsiniz Evet alternatif
dinamik bir şekilde hizmet referans url değiştirebilir olacağını referansı wsdl.exe /out:d:/Proxy.cs /order
ekle istemiyorsanız:
var service = new MyService.MyWSSoapClient();
service.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://localhost:8080/");
C# kodunuzdan "GET" web servisini nasıl arayacağınıza dair bir örnek :
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;
}
Sadece bir URL iletin ve yanıtı içeren bir dize döndürür. Oradan, kullanışlı bir şey haline dize açmak için Json.NET "DeserializeObject
" işlevini çağırabilirsiniz: Bu yardımcı olur
string JSONresponse = CallWebService("http://www.inorthwind.com/Service1.svc/getAllCustomers");
List<Customer> customers = JsonConvert.DeserializeObject<List<Customer>>(JSONresponse);
Umut.
- 1. SSL üzerinden hizmet referansı eklemeden dinamik olarak bir web servisi nasıl çağrılır
- 2. Panoya eklemeden satırı silinsin mi?
- 3. Bir sunucuda bir web servisi nasıl dağıtılır?
- 4. Model veritabanına eklemeden alan içermeli mi?
- 5. OAuth Yetkilendirme Servisi Web API 2'de
- 6. Referans olarak eklemeden NuGet paketine destekleyici kütüphaneler ekleme
- 7. GET üzerinden ASMX web servisi nasıl aranır?
- 8. Bir Android mobil uygulamasından yerel bir web servisi nasıl çağrılır
- 9. Bir web sitesinde ücretli bir abonelik servisi uygulayın
- 10. Temel Referans ile Hizmet Referansı Nasıl Kullanılır WCF SOAP Servisi
- 11. Java'da C# web servisi nasıl aranır?
- 12. WCF Rest servisi ile dosya indirilsin mi?
- 13. MonC'de WCF Servisi erişilebilir değil mi?
- 14. Web Sitesinde Referans Gösteren Kuruluşlar
- 15. Bileşen Servisi ve C#
- 16. MVC'de bir web servisi ile veritabanına nasıl bağlanır?
- 17. Geçiş mastarı uygulaması servisi klasik modda yönetime mi?
- 18. RavenDB'yi windows servisi veya IIS üzerinden mi çalıştırmalıyım?
- 19. Numara aralığında arka referans kullanılabilir mi?
- 20. Birisi istisnalara ilişkin referans referanslarını açıklayabilir mi?
- 21. Swift geçiş yapısı referans ile mi?
- 22. PHP5 nesneleri referans olarak geçti mi?
- 23. Referans değişkeni nesne değişkeni içinde mi?
- 24. Dize atama referans/kopya ile mi?
- 25. Açık protobuf servisi
- 26. PDO referans bildirimi ile mi geçiyorsunuz?
- 27. Sessizce bir Windows servisi güncelleştirin
- 28. Bir servisi tekrar kaydetme JMDNS
- 29. VB.NET'te bir REST servisi oluşturmak için öğretici?
- 30. VS hata ayıklayıcısını eklemeden CLR istisnasından bir stacktrace alabilir miyim?
Hizmet yalnızca belirli IP adreslerine yanıt veriyorsa, kodunuzu nasıl test etmeyi planlıyorsunuz? Benim önerim, servisin WSDL'sini elinde bulundurmak ve bununla etkileşime geçmek için sınıfları oluşturmak için svcutil'i çalıştırmanız gerekir. – Rich