PDA

View Full Version : سوال: دریافت xml



khadem1386
سه شنبه 24 فروردین 1389, 20:34 عصر
با سلام:
به این کد توجه کنید.
بخش هایی از برنامه من هست که یک فایل xml را پست می کنه به یک url و دوباره یک xml دریافت می کنه.


'Load the XML Request template from file
set xmlRequestDoc = Server.CreateObject("MSXML2.DOMDocument")
xmlRequestDoc.load(Server.MapPath("request_GetSellerList.xml"))

'SET VARIOUS XML NODE VALUES
'Set the Authentication token representing the user calling the function

xmlRequestDoc.selectSingleNode("//GetSellerListRequest/RequesterCredentials/eBayAuthToken").text = session("autotoken") ' UserToken 'Tokentemp
xmlRequestDoc.selectSingleNode("//GetSellerListRequest/Pagination/PageNumber").text = PageNumber

set xmlResponseDoc = Server.CreateObject("MSXML2.DOMDocument")
xmlResponseDoc.loadXml(xmlResponse.xml)


در اینجا

MSXML2.DOMDocument


استفاده کردم. این یک قسمت از کدی است که یک فایل xml را که کنارش هست را بوسیله دستور loadXml می فرسته به یک وب سروری و یک xml را بعنوان responce یا همان پاسخ دریافت می کنه.


خوب حالا سوال من این است که اگر من خودم بخواهم یک وب سرویس بسازم چی کار باید بکنم.

یعنی می خواهم یک page داشته باشم که یک کمپانی دیگر برای من xml بفرسته و من هم بتونم یک xml براش بفرستم.

اصلا به این کار چی می گند? آیا واژه web service درست است.
آیا با asp calssic می شه همچین کار کرد؟

با تشکر از شما دوستان گرامی

kashaneh
چهارشنبه 25 فروردین 1389, 13:12 عصر
دوست عزیز اگر برای این کار به سراغ ASP.Net بری بسیار بهتر خواهد بود چون در اونجا اولا برای کار با Xml کنترلهای ویژه وجود داره و هم اینکه منابع خوبی برای ساخت Web Srvice ها وجود داره... بله این کار شما در واقع ساخت Web Service هست که Asp تو این زمینه چیزی برای گفتن نداره (متاسفانه)... موفق باشی

mehdi.mousavi
چهارشنبه 25 فروردین 1389, 14:46 عصر
با سلام سوال من این است که اگر من خودم بخواهم یک وب سرویس بسازم چی کار باید بکنم. یعنی می خواهم یک page داشته باشم که یک کمپانی دیگر برای من xml بفرسته و من هم بتونم یک xml براش بفرستم. اصلا به این کار چی می گند? آیا واژه web service درست است. آیا با asp calssic می شه همچین کار کرد؟ با تشکر از شما دوستان گرامی

سلام.
بله با Classic ASP میشه اینکارو کرد و چیز عجیبی نیست. کافیه تا در ابتدای فایل، این ContentType مربوطه رو Set کنید. به بیان دیگه:


<%
Option Explicit
Response.Buffer = True
Response.Clear
Response.ContentType = "text/xml"
%>

سپس مثل بقیه فایلهای ASP باهاش برخورد کنید. فقط حواستون باشه که باید اینجا یک XML رو Write کنید که در واقع پاسخ به درخواستی هستش که براتون اومده.

موفق باشید.

khadem1386
چهارشنبه 25 فروردین 1389, 17:35 عصر
خیلی ممنون از جواب دوستان:
آقای موسوی می شه کمی بیشتر توضیح بدید؟

در مورد طریقه خواندن xml؟

مثلا با این کد؟

xmlTXT = request.form

و بعد XMLtxt را تجریه کنم.

و بعد بوسیله response.write شروع کنم بنوشتم متن xml
آیا منظور شما همینه؟

می شه چند خط مثال بزنید و کد بنویسید؟

سوال دیگه ای که دارم اینکه می شه در مورد SOPA یا WSDL که مراحل پیشرفته تر هستند نیز با همین ASP3 کار کرد ؟
یا اینکه ASP3 فقط با XML خالص کار می کنه؟ البته من چیز زیادی در مورد ساختار و کمکهاییکه SOAP به ما می کنه نمی دانم. و بیشتر با XML ساده کار کردم.

khadem1386
چهارشنبه 25 فروردین 1389, 23:27 عصر
یک http دارای header و body است.

برای مطالعه header می شه از


Request.ServerVariables("ALL_HTTP")
استفاده کرد اما برای body از چه روشی باید استفاده کرد؟

من از
request.form

اما ظاهرا نمی تونه بدنه را بخونه
با چه request ی می شه بنده http را مطالعه نمود. این فایل asp من است


<%
Option Explicit
Response.Buffer = True
Response.Clear
Response.ContentType = "text/xml"
%>

<p>cdsdfd
<% =request.form%>
<% =Request.ServerVariables("ALL_HTTP")%>
<% ="dfgdgfgfgfdgfdgfgfgfg"%>
</p>



این فایل کلمه cdsdfd و dfgdgfgfgfdgfdgfgfgfg تمامی header های که از سرور می آید و hedrih هایی که خودم هم آنها را ساختم هم در اینجا مشاهده می کنم. ولی body هایی که ساختم را نشان نمی دهد در صورتی که من فکر می کنم که request.form باید body یک HTTP را برگرداند.
آیا میشه از MSXML2.ServerXMLHTTP یا چیزی شبیه آن استفاده کرد؟

mehdi.mousavi
پنج شنبه 26 فروردین 1389, 11:21 صبح
سلام.
ببخشید، اینقدر پیامهام زیاده که برخی اوقات یکی دو تا اون وسطها جا میفته. الان نوشته شما رو دیدم....

ببینید. هدف ما الان توی این فایل ASP چیه؟ میخواهیم بر اساس یک درخواست، XML ای تولید کنیم و اونو به Client برگردونیم. من خودم عموما زمانیکه میخواستم اینکارو انجام بدم، درخواستها رو هم XML در نظر میگرفتم. تا بتونم هر وقت خواستم براحتی تغییرش بدم. به بیان دیگه، درخواستی که به فایل ASP ارسال میکنم، فرضا این هستش:

<Request name='getUsername' param1='whatever'></Request>

سپس اینو از طریق POST به فایل ASP ارسال می کنید. حالا تو فایل ASP، با استفاده از این خط کد میتونید کلیه اطلاعات پست شده از طریق فرم رو بگیرید:

Request.Form()

و میتونیم اینو به تابعی بدیم که درخواست ها رو پردازش کنه:


Public Function ProcessRequest(req)
Dim objReq
Set objReq = Server.CreateObject("MSXML2.DOMDocument.6.0")
If Not objReq.loadXML(req) Then Exit Function

Dim objRoot : Set objRoot = objReq.selectSingleNode("/Request")
If IsNull(objRoot) Then Exit Function

Dim methodName = objRoot.getAttribute("name")
Select Case methodName
Case "getUsername"
GetUserName()
End Select

Set objReq = Nothing: Set objRoot = Nothing
End Function


خوب، دقت کنید که GetUserName رو باید حالا تعریف کنیم و تو تابع فوق، پارامترهای مورد نظر رو هم از توی درخواست در بیاریم و به GetUserName بدیم (که برای کوتاهی کد من دیگه اینو ننوشتم).

سپس توی تابع GetUserName میریم UserName مورد نظر رو از بانک یا هر جای دیگه میگیریم، سپس یک XML تولید میکنیم و به Client برمیگردونیم.

برای تولید این XML هم میتونید بسادگی از string ها استفاده کنید، هم میتونید از XML Parser استفاده کنید. درست همونطور که من در تابع فوق از XML Parser برای Extract کردن جزییات درخواست استفاده کردم، شما از XML Parser برای ساخت یک XML استفاده خواهید کرد. در نهایت، همچین کدی خواهید داشت:

Response.Write objResponse.xml

سپس سمت Client اونجاییکه میخواهید از این فایل سرویس استفاده کنید، تابع JavaScript ای بدین شکل تعریف کنید:

function getXmlHttpRespSync(action, url, req)
{
var req = getXmlHttpRequestObject();
if(!req)
return null;

req.open(action, url, false);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(request);
if(req.readyState != 4 || req.status != 200 ||
!req.responseXML || !req.responseXML.hasChildNodes())
return null;

return req.responseXML;
}


که در این تابع، getXmlHttpRequestObject مثلا بدین شکل تعریف شده:


function getXmlHttpRequestObject()
{
var req = null;
if(window.XMLHttpRequest)
{
req = new XMLHttpRequest();
if(req.overrideMimeType)
req.overrideMimeType('text/xml');
}
else if(window.ActiveXObject)
{
try
{
req = new ActiveXObject('Msxml2.XMLHTTP');
}
catch(e)
{
try
{
req = new ActiveXObject('Microsoft.XMLHTTP');
}
catch(e)
{
}
}
}

return req;
}


در نهایت، هنگام استفاده می تونید براحتی اینکارو کنید:


var req = "<Request name='getUsername'></Request>";
var xml = getXmlHttpRespSync('post', 'http://whatever.com/myaspfile.asp', req);
if(!xml)
return false;

//examine the response...


بدین ترتیب، درخواست مورد نظر شما (که یک XML هستش) به سمت سرور (فایل myaspfile.asp) میره، اونجا این درخواست پردازش میشه، و یک XML در جواب به شما برمیگرده. شما هم با استفاده از JavaScript میتونید این پاسخ رو پردازش کنید و کار مورد نظرتون رو انجام بدید.

موفق باشید.

khadem1386
پنج شنبه 26 فروردین 1389, 22:01 عصر
به این لینک توجه کنید
http://support.microsoft.com/kb/290591

خیلی به من کمک کرد. این در واقع همون چیزی که آقای موسوی گفتند
این لینک را گذاشتم شاید بدرد یکی دگر هم بخوره

ولی می خواهم بدونم تو این مثالی که این لینک زده، فایل کوچکی مثل Receiver.asp واقعا یک وب سرویس بحساب می یاد؟ اگر کسی می دونه لطفا توضیح بدید مرسی

به این وسیله از آقای کاشانه و آقای موسی تشکر می شود:تشویق:

khadem1386
جمعه 27 فروردین 1389, 11:59 صبح
این هم یک آدرس دیگه برای دریافت xml و گرفتن آن
http://www.secretgeek.net/XMLSendReceive.shtml

بوسیله asp3

ولی اگر از دوستان کسی یک لینک سمپل ساده برای asp.net داشت هم از او ممنون خواهم شد.

mehdi.mousavi
جمعه 27 فروردین 1389, 13:59 عصر
ولی اگر از دوستان کسی یک لینک سمپل ساده برای ASP.NET داشت هم از او ممنون خواهم شد.

سلام.
توی ASP.NET داستان متفاوته. کدی که من گذاشتم براتون، خیلی ساده هستش. تو برنامه های واقعی، شما باید امنیت دسترسی به سرویس رو تضمین کنید. همینطور بهتره دسترسی به سرویس رو (اگر قراره بصورت عمومی ازش استفاده بشه)، محدود به get/post نشه و از پروتکلهای دیگه ای مثل SOAP یا ... پشتیبانی کنید.

همه این کارها (بعلاوه خیلی از مطالب دیگه) در ASP.NET مهیا شده و خیلی ساده میتونید اینکارها رو انجام بدید. این بحث، به این تاپیک برنمیگرده، در نتیجه اگر مایلید سوال رو در بخش Web Services مطرح کنید تا به اون پاسخ داده بشه.

موفق باشید.