Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagec#
firstline1
titleWebService Sınıfı
linenumberstrue
public class WebService
    {
        public string Url { get; set; }
        public string MethodName { get; set; }
        public string ProcessId { get; set; }
        public string Year { get; set; }
        public string Month { get; set; }
        public System.Xml.Linq.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""?>
                    <soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:tem=""http://tempuri.org/"">
                       <soapenv:Header>
                          <tem:ValidationSoapHeader>
                             <!--Optional:-->
                             <tem:User>domain\username</tem:User>
                             <!--Optional:-->
                             <tem:Password>password</tem:Password>
                          </tem:ValidationSoapHeader>
                       </soapenv:Header>
                       <soapenv:Body>
                          <tem:Start>
                             <!--Optional:-->
                             <tem:processId>{0}</tem:processId>
                             <!--Optional:-->
                             <tem:formData><![CDATA[<Data><Yil><Yil>{1}</Yil><Ay>{2}</Ay></Data>Ay>]]></tem:formData>
                          </tem:Start>
                       </soapenv:Body>
                    </soapenv:Envelope>";

            System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(Url);
            req.Headers.Add("SOAPAction", "http://tempuri.org/Start");
            req.ContentType = "text/xml;charset=\"utf-8\"";
            req.Accept = "text/xml";
            req.Method = "POST";

            using (System.IO.Stream stm = req.GetRequestStream())
            {
                soapStr = string.Format(soapStr, ProcessId, Year,Month);
                using (System.IO.StreamWriter stmw = new System.IO.StreamWriter(stm))
                {
                    stmw.Write(soapStr);
                }
            }

            using (System.IO.StreamReader responseReader = new System.IO.StreamReader(req.GetResponse().GetResponseStream()))
            {
                string result = responseReader.ReadToEnd();
                ResultXML = System.Xml.Linq.XDocument.Parse(result);
                ResultString = result;
            }
        }
    }

Bu kod bloğunu özetlemek gerekirse Ebiflow StartWorkflow.asmx web servisini kullanmak için özelleştrilmiş soap stringi WebRequest ile invoke ediyoruz. SoapStr string içerisinde soapenv:Header node içerisinde  yer alan user ve password bilgileri Ebiflow bağlantı yetkisine sahip bir kullanıcı bilgisi içermelidir.

soapenv:Body

...

içerisinde

...

yer alan tem:Start nodu servis içerisinde yer alan metodun adını içermektedir. Burada biz süreç başlatmak için Start metodunu kullanıyoruz.

tem:processId nodu içerisine başlatmak istediğimiz sürecin process Id bilgisini veriyoruz.

tem:formData nodu içerisine süreçte kullanmak istediğimiz verileri ekliyoruz. Süreç içerisine eklenirken en üst node otomatik olarak serviceData olarak oluşturuluyor ve süreç form verisine ekleniyor. Bunun için süreç form datasını önceden süreç içerisinde tanımlamamak gerekiyor.

Örnek çıktı : 

Code Block
languagexml
<serviceData>
	<Yil>2018</Yil>
	<Ay>1</Ay>
</serviceData>

Servisin çağırılması

Servisi artık istediğiniz yerden parametreleri girerek çağırabilirsiniz.

Code Block
languagec#
firstline1
 WebService ws = new WebService("http://localhost/Ebiflow/service/StartWorkflow.asmx", "Start"); // servis adresini ve metot bilgisini girerek bir instance oluşturuyoruz.
 ws.Year = ddlYil.SelectedValue; // Yıl bilgisini kullanıcıdan bir dropdownlist ile alıyoruz.
 ws.Month = ddlAy.SelectedValue; // Ay bilgisini kullanıcıdan bir dropdownlist ile alıyoruz.
 ws.ProcessId = "6BDEF9FC-4843-478F-AF54-DBCD1A8C7F5F"; //Başlatmak istediğimiz sürecin processId bilgisi. Bu bilgiyi veritabanından wflprocess tablosundan bulabiliriz.
 ws.Invoke();

Daha parametrik bir kullanım için aşağıdaki adresi ziyaret edebilirsiniz.

https://stackoverflow.com/questions/9482773/web-service-without-adding-a-reference