|
Îåêßíçóå áðü ôï ìÝëïò Wizard!. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 19-03-2008, 11:31. Υπάρχουν 14 απαντήσεις.
-
14-03-2008, 13:47
|
-
Wizard!
-
-

-
Μέλος από τις 17-04-2006
-
-
Δημοσιεύσεις 24
-
-
|
Error όταν καλώ μέθοδο σε web service
Καλησπέρα σε όλους. Αντιμετωπίζω ένα περίεργο πρόβλημα. Σε ένα project (VS2005) έχω δύο web references για δύο αντίστοιχα services. Είναι στον ίδιο server, στο ίδιο folder, με τις ίδιες ρυθμίσεις. Η μόνη διαφορά που έχουν είναι τα αρχεία asmx. Προσπαθώντας να καλέσω μιά μέθοδο από το 2ο, παίρνω το παρακάτω σφάλμα: mscorlib at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) at System.Security.CodeAccessPermission.Demand() at System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint) at System.Net.HttpRequestCreator.Create(Uri Uri) at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase) at System.Net.WebRequest.Create(Uri requestUri) at System.Web.Services.Protocols.WebClientProtocol.GetWebRequest(Uri uri) at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebRequest(Uri uri) at System.Web.Services.Protocols.SoapHttpClientProtocol.GetWebRequest(Uri uri) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at STAllocationService.STXMLAllocation.AllocationSearchForOL7(String pXML) in C:\STOnline_DNN_04.05.05\STOnline\Web References\STAllocationService\Reference.vb:line 181 at Specialtours.DNN.STOnline.Common.DataAccess.SearchAllocation(Hashtable hashData) in C:\STOnline_DNN_04.05.05\STOnline\DataAccess.vb:line 185
Τι μπορεί να φταίει? Στο 1ο service όλα δουλεύουν κανονικά. Έχω ρυθμίσει την ασφάλεια στο .ΝΕΤ ώστε να είναι fully trusted o client.
|
|
-
14-03-2008, 16:50
|
-
KelMan
-
-
-
Μέλος από τις 03-11-2004
-
Planet Earth
-
Δημοσιεύσεις 2.851
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
Τα δύο WebMethods έχουν τον ίδιο κώδικα; Γιατί το ότι είναι στον ίδιο server, στο ίδιο folder και με τις ίδιες ρυθμίσεις δεν λέει και πολλά αν δέχονται διαφορετικές παραμέτρους, επιστρέφουν διαφορετικά πράγματα και κάνουν διαφορετικά πράγματα. Όπως και να έχει, μπορείς να κάνεις debug στον κώδικα του web service να δεις καταρχήν αν εκτελείται κανονικά ο κώδικας της web method.
Vir prudens non contra ventum mingit
|
|
-
14-03-2008, 18:20
|
-
Wizard!
-
-

-
Μέλος από τις 17-04-2006
-
-
Δημοσιεύσεις 24
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
Tα services είναι φτιαγμένα από άλλους από τα οποία τραβάμε δεδομένα. Η παράμετρος που παίρνουν είναι XML κι επιστρέφουν XML. Αν κάνω HTTPPOST, παίζει κανονικά. Όταν εκτελώ τη μέθοδό του, με web reference, παίρνω αυτό το σφάλμα. Από την ίδια κλάση, με τον ίδιο τρόπο, καλώ το άλλο, το οποίο δουλεύει άριστα. Πρακτικά η μόνη διαφορά στα δύο, είναι το reference και το όνομα της μεθόδου...
|
|
-
14-03-2008, 22:38
|
|
Απ: Error όταν καλώ μέθοδο σε web service
Ποια είναι τα URL για τα δύο web services; Θα βοηθούσε επίσης αν επεσύναπτες τα Reference.vb των δύο web references.
Νατάσα Μανουσοπούλου
|
|
-
17-03-2008, 09:48
|
-
Wizard!
-
-

-
Μέλος από τις 17-04-2006
-
-
Δημοσιεύσεις 24
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
Νατάσα καλημέρα και καλή εβδομάδα. Πως μπορώ να επισυνάψω ένα αρχείο με τα references μήπως και δεις κάτι που δε βλέπω? Δεν έχω κάποιο link κατά το post που να επιτρέπει attachements. Διεύθυνση και να σου δώσω, δε θα μπορείς να τα δείς, γιατί είνα κλειδωμένα με clientIP και δεν είναι προσβάσιμα από όλους.
|
|
-
17-03-2008, 09:57
|
-
manosB
-
-

-
Μέλος από τις 05-10-2005
-
Καπανδρίτι
-
Δημοσιεύσεις 903
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
Όταν απαντάς σε μια δημοσίευση βλέπεις ότι έχεις διάφορα tabs ακριβώς πάνω από το κείμενο στο οποίο κάνεις απάντηση. Το δεύτερο tab είναι η επιλογές. Σε αυτό υπάρχει κουμπί για file attachment
Manos
|
|
-
17-03-2008, 11:00
|
-
18-03-2008, 14:43
|
-
Wizard!
-
-

-
Μέλος από τις 17-04-2006
-
-
Δημοσιεύσεις 24
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
Επειδή πρέπει κάποια στιγμή να τελειώσει, άφησα τη μέθοδο του WebReference και δοκίμασα να το κάνω με HttpWebRequest, ακόμα και με το παλιό, κλασσικό, HTTPPost... Τα ίδια και στις 3 περιτπώσεις!!! Μέσα από την ίδια κλάση, πάλι από custom control, καλώ άλλο service και παίζει άριστα! Το πρόβλημα έχει αυτό? Ο κώδικας στην 1η περίπτωση είναι αυτός και χτυπάει στο request (γραμμή 16): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Dim httpRequest As Net.HttpWebRequest Dim httpResponse As Net.HttpWebResponse Dim queryStream As IO.Stream Dim myUri As Uri Dim ByteQuery() As Byte Dim sQuery As String Dim iStatCode As Integer Dim sStatus, sText, ret As String Dim strm As IO.Stream Dim sr As IO.StreamReader
sQuery = OLParamName & strXML
myUri = New System.Uri(OLAllocationPath) httpRequest = CType(Net.WebRequest.Create(myUri), Net.HttpWebRequest) |
Στη 2η περίπτωση, χτυπάει κατευθείαν στον ορισμό είτε με τον 1ο τρόπο, είτε με το 2ο: 1 2 3 | Dim httpRequest As New MSXML2.XMLHTTP
Dim httpReq2 As New MSXML.XMLHTTPRequest |
Τι μπορεί να φταίει???
|
|
-
18-03-2008, 15:34
|
-
KelMan
-
-
-
Μέλος από τις 03-11-2004
-
Planet Earth
-
Δημοσιεύσεις 2.851
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
Ψάχνεις και ξαναψάχνεις τον client κώδικα ενώ το πρόβλημα μπορεί να βρίσκεται στο Web Service. Μήπως με το που φτιάχνει το instance και γίνεται initialize τρέχει κάποιο κώδικα που το crashάρει; Τα υπόλοιπα web methods στο προβληματικό web service παίζουν; To έχεις δει καθόλου να παίζει; Από άλλο project; Από άλλον υπολογιστή; Μήπως έχεις κανένα πρόβλημα με την εγκατάσταση του studio και δεν γίνεται σωστό code generation...
Vir prudens non contra ventum mingit
|
|
-
18-03-2008, 15:52
|
-
Wizard!
-
-

-
Μέλος από τις 17-04-2006
-
-
Δημοσιεύσεις 24
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
Γενικά όλες οι μέθοδοι στο service παίζουν με απλή κλήση από IE. Χρησιμοποιείται καθημερινά από χιλιάδες χρήστες. Το service δεν έχει πρόβλημα. Εγώ ο ίδιος, από απλή σελίδα .ΝΕΤ 2.0, το καλώ με httpPost χωρίς πρόβλημα. Μεγάλο μέρος του κώδικα είναι αντιγραφή από την απλή σελίδα και ενσωματώνεται σε άλλο project. Δε νομίζω ότι μπορώ να συμφωνήσω στο ότι φταίει το service, ειδικά τη στιγμή που χτυπάει στο Dim oXMLHTTP As New MSXML.XMLHTTPRequest
|
|
-
18-03-2008, 22:50
|
-
KelMan
-
-
-
Μέλος από τις 03-11-2004
-
Planet Earth
-
Δημοσιεύσεις 2.851
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
To ότι παίζουν με απλή κλήση από τον IE δεν λέει κάτι. Όταν παίξεις με τα proxies που φτιάχνει το Visual Studio τότε (τουλάχιστον στο .NET 2.0) παίζεις με SOAP over HTTP. Επίσης, όταν λες ότι παίζουν οι μέθοδοι με Post, πώς περνάς τo XML input που χρειάζεται ως παράμετρο ώστε να επιβεβαιώσεις ότι παίζουν σωστά; Ως προς το Dim oXMLHTTP As New MSXML.XMLHTTPRequest αυτό πάλι πώς σχετίζεται με το web service;
Vir prudens non contra ventum mingit
|
|
-
19-03-2008, 00:17
|
|
Απ: Error όταν καλώ μέθοδο σε web service
Το αρχικό error message τα λέει όλα. Δεν έχεις permission να καλέσεις το URL που χρησιμοποιείς. Μπορεί ο client να είναι asp.net εφαρμογή και να τρέχει σε partial trust, μπορεί να υπάρχει στον κώδικα σου κάποιο Deny, μπορεί να συμβαίνει κάτι άλλο, αλλά ο client δεν έχει δικαίωμα να καλέσει το URL που χρησιμοποιείς. Δεν έχει νόημα να προσπαθείς να καλέσεις το web service με περίεργους τρόπους (τί δουλειά έχει το XMLHTTPRequest ?) αλλά δεν θα βοηθήσει. Καλό θα είναι να μας πεις τί είναι ο client και να δώσεις ολόκληρο το error message, καθώς είναι φανερό ότι λείπει τουλάχιστον το κομμάτι που αναφέρεται στο SecurityException ενώ πρέπει να λείπουν και άλλα πράγματα.
Ψάχνοντας στο Google θα δεις ότι και άλλοι έχουν αυτό το πρόβλημα που και που όταν δουλεύουν σε partial trust περιβάλλοντα, συνήθως όταν η εφαρμογή τους είναι ASP.NET application ή Web service που καλεί άλλο web service.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
19-03-2008, 10:51
|
-
Wizard!
-
-

-
Μέλος από τις 17-04-2006
-
-
Δημοσιεύσεις 24
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
Παναγιώτης Καναβός:Το αρχικό error message τα λέει όλα. Δεν έχεις permission να καλέσεις το URL που χρησιμοποιείς. Μπορεί ο client να είναι asp.net εφαρμογή και να τρέχει σε partial trust, μπορεί να υπάρχει στον κώδικα σου κάποιο Deny, μπορεί να συμβαίνει κάτι άλλο, αλλά ο client δεν έχει δικαίωμα να καλέσει το URL που χρησιμοποιείς. Δεν έχει νόημα να προσπαθείς να καλέσεις το web service με περίεργους τρόπους (τί δουλειά έχει το XMLHTTPRequest ?) αλλά δεν θα βοηθήσει. Καλό θα είναι να μας πεις τί είναι ο client και να δώσεις ολόκληρο το error message, καθώς είναι φανερό ότι λείπει τουλάχιστον το κομμάτι που αναφέρεται στο SecurityException ενώ πρέπει να λείπουν και άλλα πράγματα.
Ψάχνοντας στο Google θα δεις ότι και άλλοι έχουν αυτό το πρόβλημα που και που όταν δουλεύουν σε partial trust περιβάλλοντα, συνήθως όταν η εφαρμογή τους είναι ASP.NET application ή Web service που καλεί άλλο web service.
Παναγιώτη, σωστά όλα αυτά που λες, απλά δε μπορώ να καταλάβω γιατί έχω permitions να καλέσω το www.server.com/service1.asmx ενώ δεν έχω για το www.server.com/service2.asmx. KelMan:Ως προς το Dim oXMLHTTP As New MSXML.XMLHTTPRequest αυτό πάλι πώς σχετίζεται με το web service;
Απλά έκανα δοκιμή με κάθε τρόπο που ήξερα να δω αν θα παίξει... :) Το περίεργο όμως είναι, γιατί έβγαζε security error στο Dim...? Η λύση πάντως βρέθηκε, αν και δε θα έπρεπε να είναι εκεί (πιστεύω...) Στο web.config υπήρχε αυτή η γραμμή commented: <trust level="Medium" originUrl=".*" /> Θεώρησα ότι αφού είναι commented κι αφού στο machine.config θα έπρεπε να υπάρχει η αντίστοιχη με Full trust, αφού το είχα ρυθμίσει από το .ΝΕΤ Configuration, δε θα έπαιζε ρόλο. Την έκανα uncomment, την άλλαξα σε <trust level="Full" originUrl=".*" /> και τώρα παίζει απροβλημάτιστα με όλους τους τρόπους  Ευχαριστώ για τη βοήθεια και το χρόνο σας
|
|
-
19-03-2008, 11:16
|
-
KelMan
-
-
-
Μέλος από τις 03-11-2004
-
Planet Earth
-
Δημοσιεύσεις 2.851
-
-
|
Απ: Error όταν καλώ μέθοδο σε web service
Wizard: Παναγιώτη, σωστά όλα αυτά που λες, απλά δε μπορώ να καταλάβω γιατί έχω permitions να καλέσω το www.server.com/service1.asmx ενώ δεν έχω για το www.server.com/service2.asmx.
Το security μοντέλο στο .NET είναι evidence based, δηλαδή το τι επιτρέπεται και το τι δεν επιτρέπεται να κάνει ένα κομμάτι κώδικα εξαρτάται από κριτήρια όπως ποιός τρέχει τον κώδικα (κάτω από ποιό account), που βρίσκεται ο κώδικας (local, intranet, internet) και τι προσπαθεί να κάνει ο κώδικας. Γι αυτό σου είπα ότι δεν παίζει ρόλο το ότι τρέχει το πρώτο service. Το δεύτερο μπορεί να κάνει διαφορετικά πράγματα που να απαιτούν περισσότερα δικαιώματα και καθώς δεν υπάρχουν να γυρίζει exception.
Vir prudens non contra ventum mingit
|
|
-
19-03-2008, 11:31
|
|
Απ: Error όταν καλώ μέθοδο σε web service
Και όμως αυτό ήταν το πρόβλημα από την αρχή και αυτό λέει το Error Message! Αν δεν ορίσεις ξεκάθαρα το trust level για μία εφαρμογή θα εφαρμοστεί το default για το μηχάνημα, το οποίο προφανώς ΔΕΝ είναι το Full Trust και δεν επιτρέπει να κληθεί οποιοδήποτε URL. Όσο για το error στο Dim μάλλον δεν έχεις ορίσει τα κατάλληλα permissions για να εκτελέσεις COM αντικείμενα. Το MSXML είναι ένα COM αντικείμενο.
Γενικά, όταν έχεις ένα περίεργο πρόβλημα σχεδόν πάντα η λύση είναι πολύ πιο απλή απ' ότι πιστεύεις. Σχεδόν πάντα, το πρόβλημα είναι του προγραμματιστή και όχι του Framework. Είναι απαραίτητο να απομονώσεις το πρόβλημα από την υπόλοιπη εφαρμογή, φτιάχνοντας μία νέα dummy εφαρμογή η οποία κάνει μόνο αυτό που πιστεύεις ότι δημιουργεί το πρόβλημα, με όσο το δυνατόν λιγότερες παρεμβάσεις. Αν το πρόβλημα εμφανιστεί πάλι, θα είναι πολύ πιο εύκολο να το λύσεις. Αλλιώς, ξέρεις ότι το πρόβλημα δεν είναι εκεί πού νόμιζες. Στην περίπτωση σου θα έπρεπε να φτιάξεις μία καθαρή εφαρμογή WinForms ή ASP.NET (ακόμα δεν μας είπες τί έφτιαξες στην αρχή! Έπρεπε να το μαντέψω από το ότι χρησιμοποιείς το web.config!) με ένα Web Reference στο Service και μία κλήση σε αυτό. Η κλήση αυτή θα πετύχαινε οπότε θα ήξερες ότι το πρόβλημα βρίσκεται κάπου αλλού στην εφαρμογή σου, όχι στα Web References ή τα Web Services. Μετά, θα άρχιζες να συγκρίνεις τα web.config και αν αυτό δεν έλυνε το πρόβλημα να αρχίσεις να προσθέτεις κώδικα από την κυρίως εφαρμογή στην dummy μέχρι να βρεις τί φταίει.
Ακούγεται σαν το CSI:Miami, αλλά και αυτό είναι κομμάτι του προγραμματισμού. Αν δεν δώσεις όλα τα σημαντικά στοιχεία, αν δεν προσέξεις τα στοιχεία που έχεις και αν δεν απομονώσεις το πρόβλημα, δεν βγάζεις άκρη ποτέ.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
|
|
|