0

私はWebサービスにとても慣れていないので、親切にしてください。

単純なPOJOクラスを作成し、それをaxis2サーバーにデプロイしました。

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;
    }

}

ac#クライアントからサービスを呼び出します:

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

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

pr = db.getProject();

デバッグすると、応答がnullになります。Javaの最後で、getProjectを呼び出すと、プロジェクトオブジェクトはnullになります。

何が起こっていますか?サービスコール間でプロジェクトの状態を保持するにはどうすればよいですか?

4

2 に答える 2

0

@shivaspkが回答を書く代わりにコメントを残した理由はわかりませんが、それは非常に正しいです。Webサービス呼び出し(軸呼び出しだけでなく)はステートレスであることが意図されているため、プロジェクトオブジェクトは

db.login();

電話するとき

db.getProject();

2番目の呼び出しを処理するためにAxisによって作成されたDatabaseクラスの別のインスタンスで呼び出されています。

あなたがやろうとしていることを再考することを除いて、あなたの質問に対する本当に良い答えはありません。(ログインによる)何らかの認証が必要な場合は、その認証をすべてのWebサービス呼び出しの一部にする必要があります。

于 2009-09-15T15:09:06.130 に答える
0

ほとんどのツールキットでは、Webサービスはデフォルトでステートレスです。軸も同じだと思います。

呼び出し間の状態を維持する場合は、セッションを有効にする必要があります。軸内でセッションを維持する方法の例は、次の場所にあります。

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

.NET側では、セッション識別子を保存するリクエストにCookieContainerを割り当てる必要があります。詳細については、「方法:CookieContainerを使用してWebサービスの状態を維持する」を参照してください。

あなたのコードは次のようになると思います:

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();


それであなたがやりたいことができるはずだと思いますが、お勧めしません

サービスインターフェイスの設計は、オブジェクト指向インターフェイスの設計とは少し異なります。サービスインターフェイスは通常、状態の​​使用を避け、代わりにコンシューマーに要求内のすべての関連情報を提供するように要求します。

サービス指向アーキテクチャから:

サービスは、独立した自己完結型のリクエストである必要があります。これは、実装時に1つのリクエストから別のリクエストへの情報や状態を必要としません。

その記事を読んで、おそらくあなたのデザインを再検討することを強くお勧めします。

于 2009-09-15T15:10:00.417 に答える