Blog Stats
  • Posts - 28
  • Articles - 1
  • Comments - 261
  • Trackbacks - 39

 

'Use Soap' in applicazioni Component Service: un problema "strano"

Come è noto, scrivendo applicazioni con COM+ 1.5 è possibile rendere i propri oggetti di business automaticamente disponibili come web services attivando il flag Use Soap del tab Activation dell'applicazione. Questa mattina però sono incappato in un problema "interessante" ( si fa per dire ) la cui soluzione è arrivata dai gruppi google dopo una ricerca estenuante. Il problema: alcuni componenti non riuscivano a generare correttamente il WSDL, in particolare l'errore era:

System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Runtime.Remoting.MetadataServices.WsdlGenerator.RealSchemaType.Resolve(StringBuilder sb)
   at System.Runtime.Remoting.MetadataServices.WsdlGenerator.XMLNamespace.Resolve()
   at System.Runtime.Remoting.MetadataServices.WsdlGenerator.Resolve()
   at System.Runtime.Remoting.MetadataServices.WsdlGenerator.Generate()
   at System.Runtime.Remoting.MetadataServices.MetaData.ConvertTypesToSchemaToStream(ServiceType[] serviceTypes, SdlType sdlType, Stream outputStream)
   at System.Runtime.Remoting.MetadataServices.SdlChannelSink.GenerateSdl(SdlType sdlType, IServerResponseChannelSinkStack sinkStack, ITransportHeaders requestHeaders, ITransportHeaders responseHeaders, Stream& outputStream)
   at System.Runtime.Remoting.MetadataServices.SdlChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream)
   at System.Runtime.Remoting.Channels.Http.HttpHandlerTransportSink.HandleRequest(HttpContext context)
   at System.Runtime.Remoting.Channels.Http.HttpRemotingHandler.InternalProcessRequest(HttpContext context)
Apparentemente inspiegabile, in quanto l'oggetto che così rispondeva non aveva tipi speciali ( input stringa, output stringa ! ). 
Il problema è: l'oggetto in questione implementava un interfaccia ( cosa solita per un oggetto serviced component ) 
definita nello stesso namespace dell'oggetto implementante.
Se i due namespace coincidono, il generatore di WSDL va in crisi e non funziona !
 La soluzione è: cambiare il namespace in cui è definita l'interfaccia.
Un po' strano,ha l'aria di essere un baco. Questo è il post originale che mi ha aperto la strada della salvezza :)
Va detto in aggiunta che, se non si cancellano gli assembly dai temporary ASP.NET file, il workaround non funziona.
 
 
 
 

 

Comments have been closed on this topic.
 

 

Copyright © Felice Pollano