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
Hier is mijn code voor de desktop-applicatie:
Hier is de code voor mijn webservice:
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.
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.