none
Warnings beim Portieren einer Website von .NET 2.0 auf 4.0 RRS feed

  • Frage

  • Hallo zusammen,

    ich muss eine Website von .NET 2.0 auf 4.0 portieren.
    Unter dem alten Webserver, IIS 6.0 funktionierte alles.
    Unter dem IIS 8.5, bzw 10, bekomme ich folgende Warnungen. und die eigentliche Seite,
    ein Crystal Report, bleibt leer.

    Nach diesen Warnings habe ich schon im Netz gesucht.
    Aber ich kann nichts davon mitmeinem Code in Verbindung bringen.

    Die Warnungen zusammengefasst: CA2240, CA1001, CA2100

    Warnung 1:
    CA2240 : Microsoft.Usage : Fügen Sie Typ 'DSbarcodeArticle' eine Implementierung von GetObjectData hinzu. fm.gis-vs.de C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\9bf1eb46\d5c5ef85\Sources_App_Code\dsbarcodearticle.xsd.a8a6cd1b.cs 23

    Code dazu: (Der ist allerdings automatisch erstellt, wie, weiss ich nicht)
    #pragma checksum "D:\Workspace\SVN\VStudio\GIS\Web\fm.gis-vs4.de\App_Code\DataSet\DSbarcodeArticle.xsd" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "ACFCE355FA16B2B29BEC1BADD955C6AEBB6E8A03"
    //------------------------------------------------------------------------------
    // <auto-generated>
    //     Dieser Code wurde von einem Tool generiert.
    //     Laufzeitversion:4.0.30319.42000
    //
    //     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
    //     der Code erneut generiert wird.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    
    
    /// <summary>
    ///Represents a strongly typed in-memory cache of data.
    ///</summary>
    [global::System.Serializable()]
    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
    [global::System.ComponentModel.ToolboxItem(true)]
    [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedDataSetSchema")]
    [global::System.Xml.Serialization.XmlRootAttribute("DSbarcodeArticle")]
    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.DataSet")]
    public partial class DSbarcodeArticle : global::System.Data.DataSet {
        
        private BarcodeArticleDataTable tableBarcodeArticle;
        
        private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema;
        
    ...
    



    Das nächste Warning:
    CA1001 Implementieren Sie IDisposable für "'ArticleBC'", weil Member der folgenden IDisposable-Typen instanziiert werden: 'DBConnection'. Wenn "'ArticleBC'" bereits veröffentlicht wurde, wird das Hinzufügen von neuen Membern, die IDisposable für diesen Typ implementieren, für vorhandene Benutzer als fehlerhafte Änderung angesehen, die die Lauffähigkeit der Anwendung beeinträchtigt.

    Und der Code dazu: (Methoden sind zusammengeklappt, weil wohl weniger relevant)
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    /// <summary>
    /// Summary description for ArticleBC
    /// </summary>
    public class ArticleBC
    {
    	public ArticleBC()
    	{
    		//
    		// TODO: Add constructor logic here
    		//
    	}
    
        DBConnection DBconn = new DBConnection();
    
        public string insertArticle(ArticleBO a)
        {
            return DBconn.executeInsertQuery(QueryRepositorie.insertArticle(a.customerId, a.name, a.number, a.deactivated, a.unity, a.density, a.type, a.concentrate, a.wasteDisposal, a.resourceStandstill, a.supplier, a.description));
        }
    
        public DataTable getListArticle(string customerId)
        {        
            DataSet ds = DBconn.executeSelectQuery(QueryRepositorie.getListArticle(customerId));
            return ds.Tables[0];
        }
    
        public ArticleBO getArticle(string articleId)
        {
            ArticleBO articleBO = new ArticleBO();
            DataSet ds = DBconn.executeSelectQuery(QueryRepositorie.getArticleByIdArticle(articleId));
            DataTable dt = ds.Tables[0];
            articleBO.unity = dt.Rows[0]["Unity"].ToString();
            articleBO.density = dt.Rows[0]["density"].ToString();
            articleBO.type = dt.Rows[0]["Type"].ToString();
            articleBO.concentrate = dt.Rows[0]["concentrate"].ToString();
            articleBO.wasteDisposal = dt.Rows[0]["WasteDisposal"].ToString();
            articleBO.resourceStandstill = dt.Rows[0]["resourceStandstill"].ToString();
            articleBO.supplier = dt.Rows[0]["supplier"].ToString();
            articleBO.description = dt.Rows[0]["description"].ToString();
    
            return articleBO;
            
          
        }
    
        public string verifyExistingArticle(string articleName, string articleNumber)
        {
            DataSet ds = DBconn.executeSelectQuery(QueryRepositorie.verifyExistingArticle(articleName, articleNumber));
            DataTable dt = ds.Tables[0];
            return dt.Rows.Count.ToString();
        }
    
        public string verifyRelationArticle(string articleId)
        {
            DataSet ds = DBconn.executeSelectQuery(QueryRepositorie.verifyRelationArticle(articleId));
            return ds.Tables[0].Rows.Count.ToString();
        }
    
        public string updateArticle(ArticleBO a)
        {
            return DBconn.executeUpdateQuery(QueryRepositorie.updateArticle(a.name, a.number, a.deactivated, a.unity, a.density, a.type, a.concentrate, a.wasteDisposal, a.resourceStandstill, a.supplier, a.description, a.id));
        }
    
        public string deleteArticle(string id)
        {
            DataSet ds = DBconn.executeSelectQuery(QueryRepositorie.selectSubstance4Artikel(id));
            int cntSubstance = ds.Tables[0].Rows.Count;
            ds.Clear();
            ds = DBconn.executeSelectQuery(QueryRepositorie.selectService4Article(id));
            int cntService = ds.Tables[0].Rows.Count;
            ds.Clear();
    
            string result = "";// besteht eine Verbindung zu einer (mehreren) Maschine(n)?
            // Über die "fluid"-Tabelle wird die Verbindung zu einer Maschine erstellt.
            ds = DBconn.executeSelectQuery(QueryRepositorie.selectFluid4Article(id));
            int cntFluid = ds.Tables[0].Rows.Count;
            DataTable dt = ds.Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataSet dsMachine = DBconn.executeSelectQuery(QueryRepositorie.getMachineById(dt.Rows[i]["machine_id"].ToString()));
                DataTable dtMachine = dsMachine.Tables[0];
                result = result + ", " + dtMachine.Rows[0]["machineName"];
                dsMachine.Clear();
                dtMachine.Clear();
            }
            dt.Clear();
            ds.Clear();
    
            if ((cntSubstance > 0) || (cntService > 0))
            {
                return "Artikel kann nicht gelöscht werden. Es sind Messprotokolle verbunden.";
            }
            if (cntFluid > 0)
            {
                return "Artikel noch an Anlagen gebunden: <br/>" + result + "<br/>Bitte zuerst den Anlagen einen anderen Artikel zuordnen.";
            }
            return DBconn.executeDeleteQuery(QueryRepositorie.deleteArticle(id));
        }
    
        
    }
    
    


    Die dritte Warnung:
    CA2100 Die in 'DBConnection.showSelectQuery(string)' an 'SqlDataAdapter.SqlDataAdapter(string, SqlConnection)' übergebene Abfragezeichenfolge könnte die folgenden 'query'-Variablen enthalten. Wenn eine dieser Variablen aus Benutzereingaben stammt, sollten Sie eine gespeicherte Prozedur oder eine parametrisierte SQL-Abfrage verwenden, anstatt die Abfrage mit Zeichenfolgenverkettungen zu erstellen. fm.gis-vs.de d:\Workspace\SVN\VStudio\GIS\Web\fm.gis-vs4.de\App_Code\DBConnection.cs 96 Aktiv

    Der Code dazu:
     
       public DataSet showSelectQuery(string query)
        {
            DataSet ds = new DataSet();
            this.connectDataBase();
            SqlDataAdapter dataAdap = new SqlDataAdapter(query, conn);
            SqlCommandBuilder commBuilder = new SqlCommandBuilder(dataAdap);
            dataAdap.Fill(ds);
            this.disconnectDataBase();
            return (ds);
        }


    Mittwoch, 7. Februar 2018 22:25

Alle Antworten

  • Hi Helmut,
    erst einmal sind Warnungen keine Fehler. Dass der Crystal Report leer bleibt, hat vermutlich mit den Warnungen nichts zu tun. Ich vermute da fehlende Installationen zum Report.

    Zur ersten Warnung: Vermutlich ist das der vom Designer für ein typisiertes DataSet erzeugte Code. Mit der aktuellen Version des Frameworks kann man diesen Schritt einfach wiederholen bzw. eine Aktualisierung starten. Beim Wiederholden kann es recht aufwändig werden, da man alle TableAdapter erneut hinzufügen muss.

    Die zweite Warnung weist darauf hin, dass die Klasse "ArtikelBC" nicht aufräumt. Das kann u.U. dazu führen, dass die Ressourcen erschöpfen und der Server regelmäßig neu zu starten ist. Wenn also Disposable Objekte genutzt werden, sollten diese auch entsorgt werden, ggf. mit einer eigenen Dispose Implementierung.

    Die dritte Warnung wird erzeugt, weil keine Parameter Objekte genutzt werden. Wenn also die übergebene Abfrage-Zeichenkette keine Verkettungen von Parameterwerten enthält, kann diese Warnung ignoriert werden.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Donnerstag, 8. Februar 2018 06:17
  • Hi Peter,

    danke für die Antwort.

    Zuvor lief die Anwendung seit fast 8 Jahren ohne Probleme, aber eben unter 2003 Server.

    Und nun geht es mit dem alten CrystalReports nicht mehr, und ich muss zudem die Website auf .NET 4.0 aufbohren.

    Ich hatte gehofft, es auf die Warnings schieben zu können.

    Um die Website auf 4.0 anzupassen, habe ich mit dem Assistenten auf die selbe Datenbank einen Report generiert, der anfangs auch lief.

    Dann habe ich die Web.config meines Projekts gemäss der generierten angepasst.

    Dadurch konnte ich zumindest die Website starten. Aber die Seite mit dem Report blieb leer.

    Inzwischen habe ich den gleichen Effekt bei meiner generierten Website.

    Nun habe ich eine neue generieren lassen, Die geht auch wieder. nur wie lange?

    Ich verzweifle langsam mit dem Zeug! .. Bin ich eigentlich schon....

    Viele Grüsse

    Helmut

    Donnerstag, 8. Februar 2018 22:20