webForumDet fria alternativet

Webservice collection av objekt

.NET

5 svar · 500 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

Jag håller på att jobbar med Webservices och har några frågor.
Webservicen är enbart till för mig själv för att skicka information mellan två servrar krypterad. Jag har färdiga klasser för allting och tänkte i stort sätt bara bygga en wrapperklass för själva webservicen.

Visst ska det gå att skicka egna objekt som en array?
Exempel

Car[] carColl = new Car[2];
carColl[0] = carObj1;
carColl[1] = carObj2;

Jag har i alla fall gjort en Webservice som skickar en array av objekt.

public class CarWS : System.Web.Services.WebService
{
    public CarWS(){}

    [WebMethod]
    public Car[] GetCars()
    {   
        List<Car> carColl = CarManager.GetAllCars();
        Car[] cars = new Car[carColl.Count];
        int counter = 0;
        foreach (Car c in carColl)
        {
            cars[counter] = c;
            counter++;
        }
        return cars;
    }
}

När jag försöker anroppa denna ws så får jag ett felmeddelande om åtkomst nekad. När jag lägger till webreferencen och klickar på anroppa så får jag upp korrekt xml-data med alla bilar men i c# verkar jag inte kunna gå igenom objekten.

//anroppar webservicen från ett annat projekt
WS.CarWS wsObj = new WS.CarWS();
WS.Car[] carColl =wsObj.GetAll();

Vad gör jag för fel?

Medlem sedan maj 20012 812 inlägg
#2

Addeladde skrev:

Visst ska det gå att skicka egna objekt som en array?

Visst kan du det, det viktiga är att dina objekt kan serialiseras.

Addeladde skrev:

När jag försöker anroppa denna ws så får jag ett felmeddelande om åtkomst nekad. När jag lägger till webreferencen och klickar på anroppa så får jag upp korrekt xml-data med alla bilar men i c# verkar jag inte kunna gå igenom objekten.

Åtkomst nekad låter som ett rättighetsproblem. En sak som man skall komma ihåg är att man inte kan flytta med sina rättigheter i 3 steg om man inte gör inställningar i ActiveDirectoryt och det är tydligen en komplicerad process.

Alltså om du kör din applikation som X och anropar webservicen som X så kommer din webservice INTE att anropa databasen som X. Så om du försöker göra det så får du problem. Om du inte gör det, så testa att köra den test-sida för din webservice som du kan komma åt på datorn där webservicen är installerad, men bara om du anropar din webservice från den datorn där webservicen är installerad, bara att öppna webläsaren och skriva in URL, så skall du får en test-sida.

- M

Medlem sedan jan. 20013 406 inlägg
#3

Hej

Jag kör anroppet mot databasen med en connectionstring i webservicen.
Webservicen ligger just nu på samma dator som jag testkör den mot. Det konstiga är att när jag lägger till webreferensen så kan man klicka på anroppa på metoden och då får jag korrekt xml-data med resultat från databasen.

Men när jag med kod försöker köra metoden så får jag felmeddelandet:

Begäran misslyckades med Http-statusen 401: Access Denied

Check the Response property of the exception to determine why the request failed

Medlem sedan maj 20012 812 inlägg
#4

Är det så att du har några rättigheter på din webservices, du kör inte med IUSR va?

Om jag fick gissa vilt så verkar det som du har satt rättigheter på webservicen som du uppfyller när du inne från VS anropar din webservice, men som du inte uppfyller när du starta ditt program. Kör du programmet under en annan användare?

- M

Medlem sedan jan. 20013 406 inlägg
#5

Hej

Jag kör progammet under Visual Studio. Ett Windows form och jag kör det under debug läge. Webservicen ligger på en virtuell mapp och körs väl förmodligen under iusr

I webbläsaren fungerar denna länk utan problem och jag kan anroppa metoden när jag klickar på den.
http://localhost/WS/Service.asmx?op=GetCars

Medlem sedan jan. 20013 406 inlägg
#6

Jag hade inte anonym åtkomst aktiverat på den virtuella mappen.

276 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)