Hi,
I am trying to create a web services connector. The following code won't compile. It throws an error about not being able to perform XML serialize on the 'timings' parameter which is a custom class of that web service. But when I run the same code on C# on Visual Studio it works. Can anyone let me know how to fix it?
-----------------------------------------
VB code on one identity (doesn't work)
-------------------------------------------
#If Not SCRIPTDEBUGGER Then Imports HPSM2 #End If Public Function CCC_HPSM2_service(ByVal eOpName As String, ByVal eCorrID As String, ByVal eVersion As String, ByVal eEnv As String, ByVal eRespTM As Boolean, ByVal eServiceReturn As Integer, ByVal ePayload As String, ByVal eStatus As Integer, ByVal eMsg As String, ByVal eTiming As Timing()) As Integer ' create webservice class Using ws As HPSM2.APSServer_Service = VID_GetWebService(Of HPSM2.APSServer_Service)() Dim operationName As String = eOpName Dim correlationID As String = eCorrID Dim version As String = eVersion Dim environment As String = eEnv Dim respTimeMonitoring As Boolean = eRespTM Dim serviceReturn As Int32 = Nothing Dim payload As String = ePayload Dim status As Int32 = Nothing Dim message As String = Nothing Dim timings As Timing() = Nothing ' call WebService ws.service(operationName, correlationID, version, environment, respTimeMonitoring, serviceReturn, payload, status, message, timings) End Using Return eStatus End Function
-----------------------------------
C# code on Visual studio (works)
------------------------------------
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace wsdltest { class Program { static void Main(string[] args) { APSServer.APSServer_Service apsServer = new APSServer.APSServer_Service(); int serviceReturn = 24081987; var aTime = new APSServer.Timing(); aTime.id = "something"; aTime.endMillis = 100; aTime.startMillis = 0; aTime.subsystem = "aSubsystem"; aTime.threadID = "someThreadID"; var timing = new APSServer.Timing[] { aTime }; var message = "this is a message"; var payload = "payload"; var status = 24081987; apsServer.service("testOp", "correlationID", "version", "environment", true, out serviceReturn, ref payload, out status, out message, out timing); Console.WriteLine("service return = " +serviceReturn); Console.WriteLine("message = " +message); Console.WriteLine("status = " +status); Console.WriteLine("timing = " + timing); Console.WriteLine("payload = " + payload); Console.ReadLine(); } } }
---------------------------
ERROR on the VB code
--------------------------
System.InvalidOperationException was unhandled HResult=-2146233079 Message=There was an error generating the XML document. Source=System.Xml StackTrace: at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) at System.Web.Services.Protocols.SoapHttpClientProtocol.Serialize(SoapClientMessage message) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at wsdlVB.hpsm.APSServer_Service.service(String operationName, String correlationID, String version, String environment, Boolean respTimeMonitoring, Int32& serviceReturn, String& payload, Int32& status, String& message, Timing[]& timings) in C:\Users\admhishaam\Documents\Visual Studio 2015\Projects\wsdlVB\wsdlVB\Web References\hpsm\Reference.vb:line 87 at wsdlVB.Module1.Main() in C:\Users\admhishaam\Documents\Visual Studio 2015\Projects\wsdlVB\wsdlVB\Module1.vb:line 24 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: HResult=-2147467262 Message=Specified cast is not valid. Source=021yt0yo StackTrace: at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAPSServer_Service.Write5_service(Object[] p) at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer5.Serialize(Object objectToSerialize, XmlSerializationWriter writer) at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) InnerException: From among the parameters I pass to the "hpsm.service" method, it seems that on VB it is not happy with the parameter 'timing', and complains that it is not able to serialize it. 'timing' is a custom class of that method. Here is the method Public Sub service(ByVal operationName As String, ByVal correlationID As String, ByVal version As String, ByVal environment As String, ByVal respTimeMonitoring As Boolean, ByRef serviceReturn As Integer, ByRef payload As String, ByRef status As Integer, ByRef message As String, ByRef timings() As Timing) Dim results() As Object = Me.Invoke("service", New Object() {operationName, correlationID, version, environment, respTimeMonitoring, payload}) serviceReturn = CType(results(0),Integer) payload = CType(results(1),String) status = CType(results(2),Integer) message = CType(results(3),String) timings = CType(results(4),Timing()) End Sub