Frage

Ich bin sehr neu für Web-Service-Sachen so bitte freundlich sein.

Ich habe eine einfache POJO Klasse geschrieben, und entfalten es auf einem axis2 Server:

public class Database {

    private Project project;

    public void login(){
        project = new Project();
        project.setDescription("Hello there");
        project.setName("To me");
    }

    public Project getProject(){
        return project;
    }

}

Ich nenne den Dienst von einem c # Client:

localhost.Database db = new WindowsFormsApplication1.localhost.Database();
db.login();

localhost.getProjectResponse pr = new WindowsFormsApplication1.localhost.getProjectResponse();

pr = db.getProject();

Wenn ich debuggen die Antwort null ist. Am java Ende, als ich getProject nennen, ist das Projekt Objekt null.

Was ist los? Wie kann ich den Zustand des Projekts zwischen Service-Anrufe erhalten?

War es hilfreich?

Lösung

Für die meisten Toolkits, Web-Services sind staatenlos standardmäßig. Ich denke Achse ist nicht anders.

Wenn Sie Zustand zwischen Anrufe erhalten wollen, dann müssen Sie Sitzungen ermöglichen. Ein Beispiel dafür, wie Sitzungen in der Achse zu halten ist zu finden unter:

http://kickjava.com/src/test/session/TestSimpleSession .java.htm

Auf der .NET-Seite benötigen Sie einen Cookie auf Ihre Anfrage zuzuweisen, die Sitzungskennung zu speichern. Siehe Gewußt wie:. Verwenden Sie Cookie einen Staat in Web Service zu pflegen für weitere Informationen

Ich denke, Ihr Code wie folgt aussehen würde:

localhost.Database db = new WindowsFormsApplication1.localhost.Database();
// Assign the CookieContainer to the proxy class.  
db.CookieContainer = new System.Net.CookieContainer();

db.login();

localhost.getProjectResponse pr = new WindowsFormsApplication1.localhost.getProjectResponse();
pr.CookieContainer = db.CookieContainer;

pr = db.getProject();


Ich denke, dass wir sollten Sie tun, was Sie wollen - , aber ich würde es nicht empfehlen .

Planung Service-Schnittstellen sind ein bisschen anders als objektorientierte Schnittstellen zu entwerfen. Service-Schnittstellen eschew typischerweise die Verwendung von Staat und stattdessen die Verbraucher benötigen alle relevanten Informationen in der Anfrage.

Service-Oriented Architecture :

  

Dienstleistungen sollten unabhängig sein,   umluftunabhängigem Anfragen, die nicht tun   benötigen Informationen oder den Zustand von einem   Anforderung an einen anderen, wenn umgesetzt werden.

Ich würde auf jeden Fall empfehlen, dass die Artikel zu lesen und vielleicht erneuten Besuch Ihren Entwurf.

Andere Tipps

Ich bin mir nicht sicher, warum @shivaspk hat einen Kommentar hinterlassen, statt eine Antwort zu schreiben, es ist ganz richtig: Web-Service-Anrufe (nicht nur Achse Anrufe) staatenlos sein sollen, so dass, obwohl das Projekt Objekt durch

db.login();

, wenn Sie anrufen

db.getProject();

Es wird auf einer anderen Instanz der Datenbank-Klasse aufgerufen, die von Axis wurde mit dem zweiten Anruf zu warten.

Es gibt keine wirklich gute Antwort auf Ihre Frage, mit der Ausnahme für Sie zu überdenken, was Sie zu tun versuchen. Wenn Sie irgendeine Art von Authentifizierung (via Login) benötigen, dann, dass die Authentifizierung muss Bestandteil jeden Web-Service-Aufruf sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top