Jag har försökt konvertera koden från http://www.codeproject.com/aspnet/ASPNETService.asp till VB.net Ladda ner källkoden och titta i global.asax.cs filen så vet du varför ;) Jag har gjort det, men hittar ändå inte felet tyvärr =/ Bland de allra första raderna i koden finns det en deklaration av en variabel som heter precis som den du saknar Jag ger upp, måste vara senil eller nåt, hittar inget som skiljer på koderna... =/ 1) Jag laddar ned källkoden ifrån sidan Gomorron! Ah, läste inte din kod så noga men... Hej och tack för svaret! Jag har skickat på din imail, hoppas det kom fram ordentligt, såg lite märkligt ut ^^ global.asax QueueJobs.aspx.vb Just det, jag har ändrat det, men missade att ändra det här på forumet =/ Om du byter namn på global.asax.vb, får du något felmeddelande då? Nu har jag provat att även byta namn på global.asax samt global.asax.vb Du är alltså helt säker på att alltihopa ligger i en egen applikation, och att det körs under .net 2.0 och inget annat? Jag har ingen bra idé på vad som är fel. På något sätt känns det som att asp.net inte bryr sig om global.asax. Varför vet jag inte :/Konvertering C# --> VB.net
med hjälp av en konverterare på nätet.
Det mesta tror jag funkar nu, men nåt i globala.asax.vb stämmer inte.
Följande är det som krånglar.
kod från global.asax.cs
public class Global : System.Web.HttpApplication
public Global()
{
InitializeComponent();
}
QueueJobs.aspx.cs
lock( Global._JobQueue )
{
Global._JobQueue.Add( newJob );
}
----------------------------
Översatt till:
global.asax.vb
Public Class GlobalClass
Inherits System.Web.HttpApplication
Public Sub New()
InitializeComponent()
End Sub
QueueJobs.aspx.vb
SyncLock Global._JobQueue <---------- Här dyker felen upp
Global._JobQueue.Add(newJob) <---------- Här dyker felen upp
End SyncLock
Får upp felmedd: '_JobQueue' is not a member of '<Default>'.
Kan någon hjälpa mig med detta?
Mvh Micke
Sv: Konvertering C# --> VB.net
Sv:Konvertering C# --> VB.net
Är nog lite för dåligt insatt i grunderna för att veta var jag ska leta ^^
Du får gärna hjälpa mig på traven.
Tack på förhand!
/MickeSv: Konvertering C# --> VB.net
Sv:Konvertering C# --> VB.net
Sv: Konvertering C# --> VB.net
2) Öppnar den med winrar
3) Högerklickar på filen Global.asax.cs och väljer View file
4) Kopierar texten "_JobQueue" ifrån pellesoft
5) I winrar tar jag sök och klistrar in texten "_JobQueue"
6) Första träffen i filen är deklarationen av variabeln enligt följande:
public static ArrayList _JobQueue = new ArrayList();
Sv:Konvertering C# --> VB.net
Grejen är bara den att den variabeln har jag deklarerat.
Global verkar heller inte funka som klassnamn i VB, så jag har bytt namn till GlobalClass istället, men det hjälper inte heller.
Matt man blir på sånt här =)Sv: Konvertering C# --> VB.net
> Global verkar heller inte funka som klassnamn i VB, så jag har bytt namn till GlobalClass istället, men det hjälper inte heller.
Du har aldrig funderat på att ändra på alla ställen där klassen förväntas heta Global till GlobalClass? ;)Sv:Konvertering C# --> VB.net
Tyvärr har jag ersatt Global med GlobalClassa på alla ställen, det funkar ändock icke =/
Det är som om sidan inte kan hitta klassen i global.asax.
/MickeSv:Konvertering C# --> VB.net
Har bara tagit med dom filerna som är inblandade i problemet.
/MickeSv:Konvertering C# --> VB.net
-----------------
<%@ Application CodeBehind="global.asax.vb" Language="VB" %>
<script runat="server">
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application startup
End Sub
Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application shutdown
End Sub
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when an unhandled error occurs
End Sub
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when a new session is started
End Sub
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when a session ends.
' Note: The Session_End event is raised only when the sessionstate mode
' is set to InProc in the Web.config file. If session mode is set to StateServer
' or SQLServer, the event is not raised.
End Sub
</script>
----------------------------
global.asax.vb
----------------
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Security.Principal
Imports System.Threading
Imports System.Net
Imports System.Diagnostics
Imports System.Collections
Imports System.ComponentModel
Imports System.Web
Imports System.Web.Mail
Imports System.Web.Caching
Imports System.Web.SessionState
Imports System.IO
Imports System.Messaging
Namespace TestCacheTimeout
Public Class GlobalClass
Inherits System.Web.HttpApplication
Private Const DummyPageUrl As String = "http://localhost/TestCacheTimeout/WebForm1.aspx"
Private Const CONNECTION_STRING As String = "Data Source=(local);Initial Catalog=tempdb;Integrated Security=SSPI;"
Private Const LOG_FILE As String = "c:\temp\Cachecallback.txt"
Private Const MSMQ_NAME As String = ".\private$\ASPNETService"
Private Const DummyCacheItemKey As String = "GagaGuguGigi"
Public Shared _JobQueue As ArrayList = New ArrayList
Private components As System.ComponentModel.IContainer = Nothing
Public Sub New()
InitializeComponent()
End Sub
Protected Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
RegisterCacheEntry()
End Sub
Private Sub RegisterCacheEntry()
If Not (Nothing = HttpContext.Current.Cache(DummyCacheItemKey)) Then
Return
End If
HttpContext.Current.Cache.Add(DummyCacheItemKey, "Test", Nothing, DateTime.MaxValue, TimeSpan.FromMinutes(1), CacheItemPriority.NotRemovable, AddressOf CacheItemRemovedCallback)
End Sub
Public Sub CacheItemRemovedCallback(ByVal key As String, ByVal value As Object, ByVal reason As CacheItemRemovedReason)
Debug.WriteLine("Cache item callback: " + DateTime.Now.ToString)
DoWork()
HitPage()
End Sub
Private Sub HitPage()
Dim client As WebClient = New WebClient
client.DownloadData(DummyPageUrl)
End Sub
Private Sub DoWork()
Debug.WriteLine("Begin DoWork...")
Debug.WriteLine("Running as: " + WindowsIdentity.GetCurrent.Name)
DoSomeFileWritingStuff()
DoSomeDatabaseOperation()
DoSomeEmailSendStuff()
DoSomeMSMQStuff()
ExecuteQueuedJobs()
Debug.WriteLine("End DoWork...")
End Sub
Private Sub ExecuteQueuedJobs()
Dim jobs As ArrayList = New ArrayList
For Each job As Job In _JobQueue
If job.ExecutionTime <= DateTime.Now Then
jobs.Add(job)
End If
Next
For Each job As Job In jobs
SyncLock _JobQueue
_JobQueue.Remove(job)
End SyncLock
job.Execute()
Next
End Sub
Private Sub DoSomeFileWritingStuff()
Debug.WriteLine("Writing to file...")
Try
' Using
Dim writer As StreamWriter = New StreamWriter(LOG_FILE, True)
Try
writer.WriteLine("Cache Callback: {0}", DateTime.Now)
writer.Close()
Finally
CType(writer, IDisposable).Dispose()
End Try
Catch x As Exception
Debug.WriteLine(x)
End Try
Debug.WriteLine("File write successful")
End Sub
Private Sub DoSomeDatabaseOperation()
Debug.WriteLine("Connecting to database...")
' Using
Dim con As SqlConnection = New SqlConnection(CONNECTION_STRING)
Try
con.Open()
' Using
Dim cmd As SqlCommand = New SqlCommand("INSERT INTO ASPNETServiceLog VALUES (@Message, @DateTime)", con)
Try
cmd.Parameters.Add("@Message", SqlDbType.VarChar, 1024).Value = "Hi I'm the ASP NET Service"
cmd.Parameters.Add("@DateTime", SqlDbType.DateTime).Value = DateTime.Now
cmd.ExecuteNonQuery()
Finally
CType(cmd, IDisposable).Dispose()
End Try
con.Close()
Finally
CType(con, IDisposable).Dispose()
End Try
Debug.WriteLine("Database connection successful")
End Sub
Private Sub DoSomeEmailSendStuff()
Try
Dim msg As MailMessage = New MailMessage
msg.From = "abc@cde.fgh"
msg.To = "ijk@lmn.opq"
msg.Subject = "Reminder: " + DateTime.Now.ToString
msg.Body = "This is a server generated message"
SmtpMail.Send(msg)
Catch x As Exception
Debug.WriteLine(x)
End Try
End Sub
Private Sub DoSomeMSMQStuff()
' Using
Dim queue As MessageQueue = New MessageQueue(MSMQ_NAME)
Try
queue.Send(DateTime.Now)
queue.Close()
Finally
CType(queue, IDisposable).Dispose()
End Try
End Sub
Protected Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
If HttpContext.Current.Request.Url.ToString = DummyPageUrl Then
RegisterCacheEntry()
End If
End Sub
Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Protected Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Debug.WriteLine(Server.GetLastError)
End Sub
Protected Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Protected Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
End Sub
End Class
End NamespaceSv:Konvertering C# --> VB.net
SyncLock Global._JobQueue <---------- Här dyker felen upp
Global._JobQueue.Add(newJob) <---------- Här dyker felen upp
End SyncLock
Får upp felmedd: '_JobQueue' is not a member of '<Default>'. Sv:Konvertering C# --> VB.net
Min kod ser alltså ut såhär:
QueueJobs.aspx.vb
SyncLock GlobalClass._JobQueue <---------- Här dyker felen upp
GlobalClass._JobQueue.Add(newJob) <---------- Här dyker felen upp
End SyncLock
Får upp felmedd: '_JobQueue' is not a member of '<Default>'.
Felmeddelandet är med andra ord detsamma som om det står Global.
/MickeSv: Konvertering C# --> VB.net
Sv:Konvertering C# --> VB.net
Får samma fel: "Namn 'GlobalClass' is not declared
Vad matt jag börjar bli.
Sv: Konvertering C# --> VB.net
Sv: Konvertering C# --> VB.net