Bunun için küçük bir örnek üzerinden , yazmış olduğumuz bir servise httpRequest nesnesi ile nasıl erişebileceğimizi anlatmaya çalışacağım.Örneğimize servisimizi oluşturarak başlayabiliriz.
MessageService.asmx dosyamız aşağıdaki gibi string mesaj döndüren bir web metoda sahip olmalıdır.
MessageService.asmx dosyamız aşağıdaki gibi string mesaj döndüren bir web metoda sahip olmalıdır.
- [WebService(Namespace = "http://tempuri.org/")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- [System.ComponentModel.ToolboxItem(false)]
- // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
- // [System.Web.Script.Services.ScriptService]
- public class MessageService : System.Web.Services.WebService
- {
- [WebMethod]
- public string TestMessage(string message)
- {
- return "your message is:'"+message+"'";
- }
- }
Web servisimiz Http request nesnesi ile çağıracağımız sayfamızda aşağıdaki gibi bir yapıya sahip olmalıdır.
Default.aspx
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebServiceWithHttpRequest._Default" %>
- <form id="form1" runat="server">
- <div>
- Your Message:<asp:textbox id="tbMessage" width="300" runat="server"></asp:textbox>
- <asp:button id="btnSend" runat="server" text="Send Message" onclick="btnSend_Click">
- <asp:label id="lbResult" font-bold="true" runat="server" font-size="Large"></asp:label>
- </asp:button></div>
- </form>
Default.aspx.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Net;
- using System.IO;
- using System.Text;
- using System.Xml;
- using System.Data;
- namespace WebServiceWithHttpRequest
- {
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- public void MakeRequest(string message)
- {
- StringBuilder sb = new StringBuilder();
- sb.AppendLine("<!--?xml version=\"1.0\" encoding=\"utf-8\"?-->");
- sb.AppendLine("<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/\"">");
- sb.AppendLine("<soap:body>");
- sb.AppendLine("<testmessage xmlns="\"http://tempuri.org/\"">");
- sb.AppendLine("<message>" + message + "</message>");
- sb.AppendLine("</testmessage>");
- sb.AppendLine("</soap:body>");
- sb.AppendLine("</soap:envelope>");
- HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:4412/WebServices/MessageService.asmx");
- req.Headers.Add("SOAPAction", "\"http://tempuri.org/TestMessage\"");
- req.ContentType = "text/xml;charset=\"utf-8\"";
- req.Accept = "text/xml";
- req.Method = "POST";
- using (Stream stm = req.GetRequestStream())
- {
- using (StreamWriter stmw = new StreamWriter(stm))
- {
- stmw.Write(sb.ToString());
- }
- }
- WebResponse response = req.GetResponse();
- StreamReader srreader = new StreamReader(response.GetResponseStream());
- XmlDocument xdoc = new XmlDocument();
- xdoc.LoadXml(srreader.ReadToEnd());
- //Soap Result Format
- //<!--?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>
- // <testmessageresponse xmlns="http://tempuri.org/">
- // <testmessageresult>string</testmessageresult>
- // </testmessageresponse>
- // </soap:body>
- //</soap:envelope>
- string innerMessage=xdoc.LastChild.InnerXml;
- int strindex = innerMessage.IndexOf("<testmessageresult>");
- int strendindex=innerMessage.IndexOf("</testmessageresult>");
- if (strindex != -1 && strendindex != -1)
- lbResult.Text = innerMessage.Substring(strindex, strendindex - strindex);
- else
- lbResult.Text = "Error in web service result format!";
- srreader.Close();
- srreader.Dispose();
- }
- protected void btnSend_Click(object sender, EventArgs e)
- {
- MakeRequest(tbMessage.Text);
- }
- }
- }
Web Servisimizi tarayıcıda açtığımızda aşağıdaki gibi bilgiler karşımız çıkacaktır.
Yukarıda dökümanda ilk bölüm httpRequest nesnesinin property leri ile ilgili genel bilgileri içermektedir. Post yapılacak adres, SOAPAction, Content-Type, Content-Length gibi bilgileri içermektedir. Bu bilgileri kullanarak Default.aspx.cs sayfasında da göreceğiniz üzere herhangi bir sayfadan WSDL dökümanı ve gerekli dll leri projemize eklemeden web servislerini istediğimiz gibi çalıştırabiliyoruz.Yazımın başında da belirtiğim gibi web kullanılacak web servisine geliştirme ortamında erişimimiz olmadığı durumlarda sadece servis bilgilerine bakarak , pratik ve dinamik olarak web servislerini projelerimize çalışma anında ekleyebiliriz.
Hiç yorum yok:
Yorum Gönder