Toon posts:

[ASP.NET]Timer in webservice

Pagina: 1
Acties:
  • 54 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben bezig met mijn eerste webservice. Hiervoor gebruik ik een bestaande desktop-applicatie die ik probeer om te zetten.
De applicatie gebruikt PDFCreator om een MS Word document om te zetten naar PDF.

Het probleem waar ik nu mee zit is dat PDFCreator heeft een Ready event die wordt getriggerd als de pdf klaar is. Is de functie wordt met een timer gecontroleerd of de pdf klaar is.
Als ik de interval van mijn Timer1 wil zetten, krijg ik een
code:
1
System.NullReferenceException


Hier is mijn code voor de desktop-applicatie:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
Imports PDFCreator

Public Class frmTest
    Inherits System.Windows.Forms.Form

    Private Const maxTime As Long = 20
    Private WithEvents _PDFCreator As PDFCreator.clsPDFCreator
    Private pErr As PDFCreator.clsPDFCreatorError
    Private ReadyState As Boolean
#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Timer1 As System.Timers.Timer
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        Me.Timer1 = New System.Timers.Timer
        CType(Me.Timer1, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(72, 96)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(96, 56)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "Button1"
        '
        'Timer1
        '
        Me.Timer1.Enabled = True
        Me.Timer1.SynchronizingObject = Me
        '
        'frmTest
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 266)
        Me.Controls.Add(Me.Button1)
        Me.Name = "frmTest"
        Me.Text = "test"
        CType(Me.Timer1, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        _PDFCreator = New PDFCreator.clsPDFCreator
        pErr = New PDFCreator.clsPDFCreatorError
        Dim filename As String = "C:\testPDF.doc"
        Dim DefaultPrinter As String = ""

        Dim parameters As String = "/NoProcessingAtStartup"
        If _PDFCreator.cStart(parameters) = False Then
            MsgBox("Status: Error[" & pErr.Number & "]: " & pErr.Description)
            _PDFCreator.cPrinterStop = True
            Return
        End If
        _PDFCreator.cDefaultPrinter = "PDFCreator"
        If Not _PDFCreator.cIsPrintable(filename) Then
            MsgBox("File '" & filename & "' is not printable!", MsgBoxStyle.Exclamation, Me.Text)
            Exit Sub
        End If

        Dim opt As PDFCreator.clsPDFCreatorOptions = _PDFCreator.cOptions
        With opt
            .UseAutosave = 1
            .UseAutosaveDirectory = 1
            .AutosaveDirectory = "C:\"
            .AutosaveFilename = "resultPdf.pdf"
        End With
        With _PDFCreator
            .cOptions = opt
            .cClearCache()
            DefaultPrinter = .cDefaultPrinter
            .cDefaultPrinter = "PDFCreator"
            .cPrintFile(filename)
            .cPrinterStop = False
        End With

        ReadyState = False

        With Timer1
            .Interval = maxTime * 1000
            .Enabled = True
            Do While Not ReadyState And .Enabled
                Application.DoEvents()
            Loop
            .Enabled = False
        End With
        If Not ReadyState Then
            MsgBox("Creating printer test page as pdf." & vbCrLf & vbCrLf & _
             "An error is occured: Time is up!", MsgBoxStyle.Exclamation, Me.Text)
        End If
        _PDFCreator.cPrinterStop = True
        _PDFCreator.cDefaultPrinter = DefaultPrinter
        opt = Nothing

    End Sub
    Private Sub PDFCreator_Ready() Handles _PDFCreator.eReady
        MsgBox("Status: """ & _PDFCreator.cOutputFilename & """ was created!")
        _PDFCreator.cPrinterStop = True
        ReadyState = True
    End Sub

    Private Sub _PDFCreator_eError() Handles _PDFCreator.eError
        pErr = _PDFCreator.cError
    End Sub

End Class


Hier is de code voor mijn webservice:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel

<System.Web.Services.WebService(Namespace:="http://lo/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class Service1
    Inherits System.Web.Services.WebService

    Private Const maxTime As Integer = 20
    Private WithEvents _PDFCreator As PDFCreator.clsPDFCreator
    Private pErr As PDFCreator.clsPDFCreatorError
    Private ReadyState As Boolean
    Private sRetval As String = ""
    Private components As System.ComponentModel.IContainer
    Friend WithEvents Timer1 As System.Windows.Forms.Timer
    <WebMethod()> _
    Public Function HelloWorld() As String
        Return "Hello World"
    End Function
    <WebMethod()> _
    Public Function convertDoc2Pdf() As String

        Dim DefaultPrinter As String = ""
        _PDFCreator = New PDFCreator.clsPDFCreator
        Dim opt As PDFCreator.clsPDFCreatorOptions = Nothing

        Try
            pErr = New PDFCreator.clsPDFCreatorError
            Dim filename As String = "C:\testPDF.doc"

            Dim parameters As String = "/NoProcessingAtStartup"
            If _PDFCreator.cStart(parameters) = False Then
                _PDFCreator.cPrinterStop = True
                Return "Status: Error[" & pErr.Number & "]: " & pErr.Description
            End If
            _PDFCreator.cDefaultPrinter = "PDFCreator"
            If Not _PDFCreator.cIsPrintable(filename) Then
                Return "File '" & filename & "' is not printable!"
            End If

            opt = _PDFCreator.cOptions
            With opt
                .UseAutosave = 1
                .UseAutosaveDirectory = 1
                .AutosaveDirectory = "C:\"
                .AutosaveFilename = "resultPdf.pdf"
            End With
            With _PDFCreator
                .cOptions = opt
                .cClearCache()
                DefaultPrinter = .cDefaultPrinter
                .cDefaultPrinter = "PDFCreator"
                .cPrintFile(filename)
                .cPrinterStop = False
            End With

            ReadyState = False

            With Timer1
                .Interval = maxTime * 1000
                .Enabled = True
                Do While Not ReadyState And .Enabled
                    'Application.DoEvents()
                Loop
                .Enabled = False
            End With
            If Not ReadyState Then
                sRetval = "Creating printer test page as pdf." & vbCrLf & vbCrLf & _
                 "An error is occured: Time is up!"
            End If

        Catch ex As Exception
            sRetval = "An error has occurred. The full error text for this operation follows below." + vbCrLf + vbCrLf + ex.ToString()
        Finally
            _PDFCreator.cPrinterStop = True
            _PDFCreator.cDefaultPrinter = DefaultPrinter
            _PDFCreator.cClose()
            _PDFCreator = Nothing
            opt = Nothing
        End Try
        Return sRetval
    End Function
    Private Sub PDFCreator_Ready() Handles _PDFCreator.eReady
        sRetval = "Status: """ & _PDFCreator.cOutputFilename & """ was created!"
        _PDFCreator.cPrinterStop = True
        ReadyState = True
    End Sub

    Private Sub _PDFCreator_eError() Handles _PDFCreator.eError
        pErr = _PDFCreator.cError
    End Sub

    Private Sub InitializeComponent()
        Me.components = New System.ComponentModel.Container
        Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
    End Sub
End Class


De fout zit in regel 62.
Ik heb al gezocht of er wel timers gebruikt mogen worden in een webservice, maar wat ik heb begrepen mag dat wel.
Ik zit ook nog met regel 65 wat daar de webservice-variant van is.

Graag jullie advies.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik heb weinig trek om 250+ regels code na te gaan spitten, en waarschijnlijk de meeste PRG-ers hier met mij. Hier in PRG zien we graag wat relevante code en niet complete huge-ass lappen zonder dat we daarbij zien wat je hebt gedebugged. Nu komt het nogal over van: dit is mijn code, het werkt niet, en nu?
En zo werkt het helaas (voor jou, gelukkig voor ons) niet in PRG. Daarom wijs ik je vriendelijk op onze Programming Beleid Quickstart. Daarin kun je precies vinden hoe wij hier graag een topic zien. Je bent van harte welkom met een nieuw topic, maar wees dan dus wat duidelijker in je post (kortere/relevante code en laat zien wat je al gezocht/gevonden/geprobeerd hebt om het op te lossen).

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Dit topic is gesloten.