webservice

noa 21

New member
webservice

איך אני בונה webservice ב-Classic ASP ? אני רוצה לבנות אחד שישלוף מידע מה-DB ויחזיר אותו לאלה שפונים ל-webservice. אבל הכל ב-ASP. האם ניתן ? תודה
 

Xעמרי

New member
את יכולה להוציא איזה פלט שאת רוצה

ואם זה יהיה XML תוכלי להעניק לו תכונות זהות לwebService כמו שהוא ממומש בכל טכנולוגיה אחרת
 

noa 21

New member
יצרתי את ה-WEBSERVICE

אבל עדיין זה לא עובד לי. יצרתי אותו ב-.NET, התקנתי על השרת והכל פיקס. עכשיו אני מנסה לגשת אליו מדף ASP באמצעות הקוד הבא: אך זה לא עובד לי:
SendString = "<?xml version=""1.0"" encoding=""utf-8""?>" SendString = SendString & "<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/"">" SendString = SendString & "<soap:Body>" SendString = SendString & "<GetJobStatus xmlns=""http://tempuri.org/"" />" SendString = SendString & "<jid>15</jid>" SendString = SendString & "<sid>26</sid>" SendString = SendString & "</GetJobStatus>" SendString = SendString & "</soap:Body>" SendString = SendString & "</soap:Envelope>" Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP") objXMLHTTP.open "POST", "http://1.1.1.1/ws/Service1.asmx", False objXMLHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8" objXMLHTTP.setRequestHeader "Content-Length", Len(SendString) objXMLHTTP.setRequestHeader "SOAPAction", "http://tempuri.org/GetJobStatus" objXMLHTTP.send(SendString) response.write objXMLHTTP.Status​
אני מקבלת 400 מה יכולה להיות הבעיה ?
 

Xעמרי

New member
הימור

נסי להוריד את ההגדרות של setRequestHeader (כל השלושה) יש לי קוד שעובד מצוין וההבדל היחיד בניהם הוא העדר ההגדרות הללו.
 

Xעמרי

New member
../images/Emo13.gif טוב..אז נסיון נוסף

בהסתכלות נוספת על הקוד שלי (ואני מצטער שאין לי תשובה חכמה יותר לתת, פשוט, זה עובד ושלך לא) יש הבדלים נוספים אז במקום לשנות לאט לאט את הבקשה שלך, נעשה את זה בבת אחת: ככה נראית הבקשה שלי:
xml="<?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>##bodyPlaceHolder##" &_ "</soap:Body>" &_ "</soap:Envelope>"​
אני לא יודע אם זה משנה, אבל הurl של ה xmlns:xsi שונה ובמקום להכפיל מרכאות השתמשתי בגרשיים כדי לתחום ערכים באטריביוטים השונים השרת שאני עובד מולו לא אמור להיות שונה מהותית מהשרת שאת עובדת מולו ולכן אני באמת מאמין שמדובר בצורת כתיבת הבקשה ולא משהו אחר
 

noa 21

New member
תראה מה כן עובד...

מצאתי קוד שכן עובד, אבל אני לא מבינה למה הוא כן והקודם לא, תכף אנסה גם את שלך.
Dim objXMLHTTP : set objXMLHTTP = Server.CreateObject("Msxml2.XMLHTTP.3.0") Dim SendString SendString = "<?xml version=""1.0"" encoding=""utf-8""?>" SendString = SendString & "<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/env...""http://schemas.xmlsoap.org/soap/encoding/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">" SendString = SendString & "<SOAP-ENV:Body>" SendString = SendString & "<m:GetJobStatus xmlns:m=""http://tempuri.org/"">" SendString = SendString & "<jid>15</jid>" SendString = SendString & "<sid>26</sid>" SendString = SendString & "</m:GetJobStatus>" SendString = SendString & "</SOAP-ENV:Body>" SendString = SendString & "</SOAP-ENV:Envelope>" objXMLHTTP.open "post", "http://1.1.1.1/ws/Service1.asmx", False objXMLHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8" objXMLHTTP.setRequestHeader "Content-Length", Len(SendString) objXMLHTTP.setRequestHeader "SOAPAction", "http://tempuri.org/GetJobStatus" objXMLHTTP.send(SendString) If objXMLHTTP.Status = 200 Then response.write objXMLHTTP.responseText​
 

Xעמרי

New member
יכול להיות שמדובר בהבדלי גרסאות בDLL

וכשהשתמשת בDLL השני (Msxml2.XMLHTTP.3.0) התגברת על הבאג שכנראה קיים בDLL הראשון שהשתמשת בו (Microsoft.XMLHTTP) ושכנראה אצלי עובד קצת יותר טוב.
 

pitoach

New member
נקודה למחשבה קטנה לפני שאני רץ

שגיאה 400+ הן שגיאות צד לקוח ולא שגיאות שרת
שגיאות שרת הן כמו שבטח כולם זוכרים שגיאות 500+ כך שנראה שיש אי התאמה בין מה ששולח השרת למה שמצפה הלקוח לקבל (למשל כותרים לא מתאימים)... * כמובן שאובייקטים שונים מייצרים קוד שונה ללקוח אולי ** הקישור הבא יכול לעזור מעט בינתיים (שימו לב לקוד הראשון הכולל הפרדה בין דפדפנים שונים) http://msdn.microsoft.com/en-us/library/ms537505(v=vs.85).aspx *** והקישור הבא שהוא באמת אחד המדריכים הכי יפים שראיתי בעברית מבחינת השקעה על נושא ספציפי כל כך (עברתי רק בריפרוף כרגע): http://www.yuro2u.com/guides/XMLHTTP/ אם עדיין יש בעיה בנושא אשמח להיכנס לזה מאוחר יותר. הבנתי אבל שמצאתם פתרון בכל מקרה (ותמיד כדאי לבדוק מה הגיע ללקוח בבעיה של שגיאת 400+ ומה ההבדלים בין מה שעובד ומה שלא עובד).
 

pitoach

New member
הערה בקשר לקוד (לא לשאלה)

את יודעת מה ההבדל בין שימוש בהוראה:
X = "1" X = X & "2"​
לבין כתיבה של :
X = "1" &_ "2"​
זה ההבדל שמירה של 2 נתונים בזכרון לבין נתון בודד ב ASP קלאסי אין אובייקט יותר נוח ממשתנה שרשרת רגיל ולכן צריך להקפיד יותר... בדוט נט יש אובייקט שנועד לצורך מניפולציות על STRING בשם StringBuilder ההבדל המרכזי בינו לבין String (אם צריך לפשט את זה) הוא ששינוי של String גורר "התעלמות" מהמיקום בזכרון של הנתון הקודם ובנייה של מקום חדש בזכרון עבור השרשרת החדשה (לא ניתן לשנות את השרשרת למעשה אלא להחליף אותה) בעוד האובייקט שהזכרתי מאפשר לבצע מניפולציות על הנתון הקיים.
 
למעלה