2010-04-23 21 views
5

Aynı uygulamada bulunan ancak aspx dosyalarının aynı klasöründe olmayan bir asp.net uygulaması ve webservices (asmx) var. Web servislerini kullanan bir winform uygulaması var. Web hizmeti yöntemlerini [WebMethod (EnableSession = true)] ile işaretledim ancak web servislerindeki uygulamadaki aynı oturum değerlerini paylaşamıyorum. winform uygulama uygulamadan sessionID erişebilir ve benWebservice ve asp.net uygulaması arasında Oturum Paylaşma

Uri uri = new Uri(ServerServiceUrl); 
_cookieContainer = new CookieContainer(); 
_cookieContainer.Add(new Cookie("ASP.NET_SessionId", SessionID, "/", uri.Host)); 

Benim sorum şu kodu kullanıyorum: Ben eksik veya ben webservices uygulama sessioin erişememesi yanlış yapıyorum bir şey var mı?

+3

Web servisinde neden oturumlara gereksiniminiz var? Geçici bir durumu saklıyor musun? Bu durumda, IMO hizmetleri vatansız olmalıdır & bundan, senin sorunun, sadece uygulaması gibi, statik sınıflar gibi webservices – Sunny

+0

Kabul ... var olamazdı java webservices konuşmak ve Uygulama hizmetleri çağırdığında, bir süre için değerleri önbelleğe alır. Java servislerini tekrar tekrar aramak yerine, uygulama tarafından önbelleğe alınan verileri kullanmak istiyorum. Bu yüzden seansı neden paylaşmak istiyorum. – Pierreten

+0

Benim aspx hizmetlerini düşünmek gerekir, –

cevap

1

Neden winforms uygulamasının oturumu "kaçırma" durumuna getiremediğiniz konusunda hiçbir ışık tutamıyorum - yaptığınız şey tam olarak istediğiniz şeyi yapması gerektiği gibi görünüyor.

Sadece kullanıcının oturum deposu yerine uygulama önbelleğini (java hizmetinden gelen yanıtı önbelleğe almak için) kullanmanızı öneririz. Bu aşağıdaki avantajlara sahiptir: -

  • a) önbelleğe bilgiler (örn erişim kontrollü) daha bağımsız bir kullanıcının daha sonra aynı önbelleğe bilgi birden fazla kullanıcı için kullanılan ve her oturum için indirilmeyip edilebilir için uygun değilse .
  • b) Oturum verileriyle aldığınızdan ne zaman ve ne zaman tutulduğu konusunda daha fazla önbelleğe sahip olduğunuza dair daha fazla kontrole sahip olursunuz (yalnızca oturumunuzun ömrü boyunca yaşar ve silmeyi unutursanız büyümenin ve büyümenin tehlikesi vardır) Eğer oturum kaçırma çalışma almak için yönetmek yoksa eski bilgi)
  • c), yine herhangi bir oturumdan verileri önbelleğe erişebilir.
0

Web hizmet sınıfınızı System.Web.SessionState.IRequiresSessionState'dan mi mi çalıştırdınız?

Normalde http işleyicileri için kullanılıyor, ancak webservices aynı işaretleyici arayüzü kullanmak gibi görünüyor.

+0

Bunu denemedim, ancak anladığım kadarıyla, her yönteme [WebMethod (EnableSession = true)] ekleyerek oturum etkin kılar. Kullanılabilir oturum değişkenlerim var, sadece yeni bir oturum değil ve oturum zaten uygulamada oluşturulmuş değil. –

+0

Sadece farkettim. Web servisine aynı makineden mi erişiyorsunuz? Bu durumda, çerezinizi kurarken "uri.Host" kullanıp geridöngü arabirimini kullanmamanız gerektiğinden emin misiniz? – Radu094

İlgili konular