webForumDet fria alternativet

Bygga i Release mode ger Web Service error

.NET

5 svar · 591 visningar · startad av freguz

Medlem sedan feb. 2005280 inlägg
Frågan#1

Här är en mäklig grej tycker jag

Har en web service som funkar hur fint som helst (den hämtar "assets" från C2, främst bilder som byte[]), om man bygger i debug-mode dvs....

Bygger jag det hela i Release mode så får jag konstiga web service fel; att värdena redan är inlagda (hajar inte riktigt)

Item has already been added. Key in dictionary: 'MyNamespace.Remote.C2.FieldMetaData'  Key being added: 'MyNamespace.Remote.C2.FieldMetaData'

observera att det spelar ingen roll om det är compilation debug="true" eller "false", utan det är byggeriet som är avgörande.

Funkar Visual Studio annorlunda i release mode så tillvida att koden agerar annorlunda? Eller hur ska man tolka detta fel?

SKa googla lite på felet, återkommer om jag hittar nåt, annars kanske nån annan redan har en aning, vad vet man ;)

Medlem sedan maj 20012 812 inlägg
#2

Själva koden kommer inte att ändras om du bygger i debug/release mode. Det som ändras är den debuginformation som läggs till för att du skall kunna debuga applikationen.

Frågan är om felete som du får, händer i koden eller under själva byggandet. För om felet händer i koden så har det inget med bygglägget att göra, utan något annant som blir jobbigt att hitta eftersom du inte kan debuga dig igenom koden. Då blir det till att logga ordentligt för att hitta var någonstans som felet inträffar och varför.

- M

Medlem sedan feb. 2005280 inlägg
#3

Det bygger utan problem i båda lägena.

Jag hajar inte hur samma kod och samma web service plötsligt kan generera ett fel, bara för att man byggde med "mindre debuginformation". Det funkar om jag switchar tillbaka igen.

mer av felet:

Source Error: 

Line 397:        [return: System.Xml.Serialization.SoapElementAttribute("getAssetReturn")]
Line 398:        public DigitalAsset getAsset(string sessionId, int assetId, AssetTemplate assetTemplate) {
Line 399:            object[] results = this.Invoke("getAsset", new object[] {
Line 400:                        sessionId,
Line 401:                        assetId,
 

Source File: C:\Inetpub\CompanyX\Main\CompanyX.EPi.External\Web References\Remote.C2\Reference.cs    Line: 399 

Stack Trace: 

[ArgumentException: Item has already been added. Key in dictionary: 'CompanyX.EPi.External.Remote.C2.FieldMetaData'  Key being added: 'CompanyX.EPi.External.Remote.C2.FieldMetaData']
   System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) +2807907
   System.Collections.Hashtable.Add(Object key, Object value) +11
   System.Xml.Serialization.XmlSerializationWriter.AddWriteCallback(Type type, String typeName, String typeNs, XmlSerializationWriteCallback callback) +74
   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.InitCallbacks() +1966
   System.Xml.Serialization.XmlSerializationWriter.GetTypeEntry(Type t) +53
   System.Xml.Serialization.XmlSerializationWriter.WriteReferencedElement(String name, String ns, Object o, Type ambientType) +117
   System.Xml.Serialization.XmlSerializationWriter.WriteReferencedElements() +50
   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write135_getAsset(Object[] p) +339
   Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer164.Serialize(Object objectToSerialize, XmlSerializationWriter writer) +73
   System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) +260

[InvalidOperationException: There was an error generating the XML document.]
   System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) +674
   System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle) +18
   System.Web.Services.Protocols.SoapHttpClientProtocol.Serialize(SoapClientMessage message) +510
   System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) +129
   CompanyX.EPi.External.Remote.C2.AirportService.getAsset(String sessionId, Int32 assetId, AssetTemplate assetTemplate) in C:\Inetpub\CompanyX\Main\CompanyX.EPi.External\Web References\Remote.C2\Reference.cs:399
   CompanyX.EPi.External.Corporate.Templates.Downloader.LoadAsset(String assetId, C2ImageRepresentation Imageversion) in C:\Inetpub\CompanyX\Main\CompanyX.EPi.External.Corporate\Templates\Downloader.aspx.cs:155
   CompanyX.EPi.External.Corporate.Templates.Downloader.Page_Load(Object sender, EventArgs e) in C:\Inetpub\CompanyX\Main\CompanyX.EPi.External.Corporate\Templates\Downloader.aspx.cs:29
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061

 

--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.832; ASP.NET Version:2.0.50727.832
Medlem sedan maj 20012 812 inlägg
#4

Är det så att det inte är din kod som det är fel på utan den proxy klass som genereras när du sätter din webReferens?

Det verkar ju vara så att du får felet när de försöker serializera datan för anropet mot webservicesen.

Jag kan inte heller förstå att det skall fungerar i debug läge men inte i release läge. Eftersom det borde vara samma information i koden som exekveras.

Om jag hade varit som dig, så hade jag kört det i debugläge, tråkigt att det tar lite mer prestanda, men det är ju bättre än att det inte fungerar, och ett sån't här fel kan ta hur lång tid som helst att hitta, eller så tar det bara någon timme...

- M

Medlem sedan feb. 2005280 inlägg
#5

Jag har mailat stack trace och hela min kod till C2, och de har sagt att de ska försöka återskapa felet, känns som om det kan vara deras boll :h

Medlem sedan feb. 2005280 inlägg
#6

Det visade sig vara ett programmeringsknas, inte helt uppenbart dock.

Jag ärvde från den Airport till en egen class med partial class, och i den så overrideade jag GetWebRequest(Uri uri) bara för att justera lite värden (keep alive osv).

Det funkade bra i debug mode, men inte i release :OO

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)