Laden...

Forenbeiträge von ZeroQool Ingesamt 322 Beiträge

19.09.2012 - 07:58 Uhr

verwendetes Datenbanksystem: IBM DB2

Hallo zusammen,

leider habe ich folgendes Problem und würde eine Ansatz-Hilfe benötigen.

Ich lade ein Excel via Code rein und es kann in einigen Spalten vorkommen, dass dort Listings sind, sprich Aufzählungszeichen. Den Content der Excel muss ich an einen SOAP WebService übergeben, der diesen in eine IBM DB2 schreibt. Das klappt mehr oder weniger, aber sobald ich mir den Content über den WebService lade ist die "XML Struktur" wegen diesen Aufzählungszeichen zerstört.

Den Response String habe ich mir dann mal manuell in den XML Spy geladen und habe eben diese Zeichen im XML (siehe Anhang).

Jetzt ist meine Frage wie ich das umgehen kann? Oder es irgendwie eine Möglichkeit gibt bspw die Anführungsszeichen mit HTML Code via Komponente (3rd party & Co) oder so zu ersetzen

<ul> 
<li></li>
</ul>

Danke!

16.08.2012 - 00:30 Uhr

Hab mir gerade die MVC4 Templates der VS2012 RC und der RTM angeguckt. Die unterscheiden sich...also in der RTM Version wird mit WebSecurity gearbeitet.

Das erklärt dann vieles...

15.08.2012 - 23:52 Uhr

Das würde natürlich alles erklären.

Habe jetzt mal alle Projektarten bzgl. MVC4 bei VS2012 (Framework 4.5) durchgespielt. Überall bzw nur bei Internet wird mir dieser AccountController mit WebSecurity erstellt....die anderen Projektarten haben keinen AccountController.

In VS2010 MVC4 (Framework 4.0) sieht mein AccountController genau so aus wie du es gepostet hast. Sehr eigenartig. Es sind keine zusätzliche Addons usw für VS2012 installiert. Deshalb kann ich mir den Unterschied auch nicht erklären.

15.08.2012 - 23:14 Uhr

Vllt drücke ich mich echt blöd aus....

Also das WebSecurity ist schon standardmäßig im AccountController gewesen. Muss allerdings sagen, ,dass meine Umgebung VS2012 ist (MVC4 - Internet Projekt). Nicht das es daran liegt.

Im Anhang mal der AccountController ohne jegliche Veränderung, so wie es VS2012 erstellt.

Habe es jetzt so gelöst:

var confirmationToken = WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { EMail = model.Email, ApplicationName= "HOHOHO" }, true);

und die entsprechende Table erweitert, damit EMail und ApplicationName dort gespeichert werden.

Trotzdem Danke!

15.08.2012 - 21:02 Uhr

Hallo,

du hast Recht.

Die web.config hatte ich schon bereits angepasst bzw konnte die aus meinem alten Projekt (MVC3) übernehmen:


<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="TEST" />
</providers>
</membership>
<profile defaultProvider="AspNetSqlProfileProvider">
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="TEST" />
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="TEST" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="TEST" />
</providers>
</roleManager>

Habe zwar gemerkt, dass er die alten Tabellen nicht mehr benutzt und neue angelegt hat, aber das war nicht so gravierend.

Bzgl. der MVC3 Migration habe ich ein MVC4 Projekt neu erstellt und mir meine Models, Views, Controller entsprechend rübergezogen. Dabei ist mir aufgefallen, dass der AccountController die User über WebSecurity erstellt, anstatt wie ich es früher (MVC3) mit


          MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

Dieser Membership wird anscheinend bei MVC4 nicht mehr unterstützt, zumindestens bekomme ich dabei die Fehlermeldung ...> Fehlermeldung:

Die angegebene Methode wird nicht unterstützt.

Habe kein Problem damit mit WebSecurity zu arbeiten und dessen DB, aber das Property bzgl. ApplicationName wäre für mich hilfreich gewesen und deshalb auch mein Posting

15.08.2012 - 16:11 Uhr

Hallo,

habe gerade ein MVC3 Projekt auf MVC4 umgestellt. Wenn sich ein User registriert konnte ich ihm ein ApplicationName zuweisen. Irgendwie fehlt mir das jetzt bei dem WebSecurity. Über Google finde ich auch nichts passendes...weiß jemand Rat? Danke

PS Hintergrund ist, dass ich bei einem unique Benutzername nach seinem Login wußte zu welcher Application er gehört und dementsprechend gehe ich danach auf andere Datenbanken.

11.08.2012 - 22:28 Uhr

Mit Admin-Rechte installiert? Also rechte Maustaste usw.

08.08.2012 - 15:56 Uhr

@Abt

Was ist denn bei dir

DatabaseConnectionFactory.Single

Danke

03.08.2012 - 21:06 Uhr

Ich glaube du musst wie die Fehlermeldung sagt deine 2 Out Parameter intialisieren, weil gar nicht gegeben ist, dass der Inhalt der ForEach Schleife erreicht wird. (Bsp. XML könnte leer sein usw.)

03.08.2012 - 21:00 Uhr

Hallo zusammen und danke für die Hinweise.

Konnte mein Problem mit eurer Hilfe bzw von Abt lösen....über jQuery eine Action ausgelöst, die mir dann ein PartialView ausgegeben hat.

$.post('@Url.Action.....

Funzt alles wunderbar, bis auf die Tatsache das ich an die PartialView meine komplettes ViewModel Customer übergeben muss, anstatt nur das "Objekt" "Kontakte" welches in Customer deklariert ist. Sonst hatte ich Probleme beim SUBMIT der Form...die ganzen Inhalte der PartialView wurde nicht an meine HTTPPOST Action übergeben.

01.08.2012 - 08:41 Uhr

Hallo Abt,

vielen Dank für die schnelle Antwort und den vorgegebenen Ansatz....

Mit flackern meinte ich eher, dass ich zB in dem Fall eine recht große Maske habe (vertikales Scrollen). Die Kontakte sind bspw ganz unten. Nun scrollt der User bis unten hin, macht seine Eingabe und beim Add wird die HTTPPOST Action ausgeführt...die neue Kontaktart wird in DB geschrieben und ich baue die View neu auf. Jetzt ist der "Cursor" wieder ganz oben und der User muss schon wieder runterscrollen.

31.07.2012 - 23:33 Uhr

Hallo zusammen,

ich habe eine Kunden-View in der der User unter anderem verschiedene Kontaktdaten hinterlegen kann.

Aufbau:
Tabelle mit allen angelegten Kontakten und darunter*DropDownList (Kontaktart) *TextBox (Inhalt)

mit einem "Add" Button.

Wenn der User den Add Button drückt wird das Bild komplett neu aufgebaut (flackern) und man befindet sich im oberen Fensterbereich. Nun muss der User wieder runterscrollen, neuen Konktakt anlegen usw.

Jetzt suche ich eine Lösung bzw Ansatz der so ähnlich wie das ASP WEBFORMS UpdatePanel arbeitet. -> Kein Flacker-Effekt

Danke

10.06.2012 - 23:29 Uhr

Hallo,

ich weiss nicht, ob es so etwas überhaupt gibt,aber ich möchte gerne in meiner ASP MVC Anwendung das Feature anbieten, wenn die WebApp über das iPad aufgerufen wird das der User seine Unterschrift via "Touch" setzen kann.

Danke

07.06.2012 - 22:13 Uhr

Popups sind auch nervig, aber ich wüßte jetzt nicht auf Anhieb was besser wäre. Wie würdest du es denn lösen?

Ich könnte jetzt auch die Produktliste als eigeneständige View/Seite machen, aber ich denke das wäre genauso nervig...ich wähle einen Artikel aus und werde wieder auf die Hauptseite geleitet. Dann will ich den nächsten Artikel auswählen, wieder eine neue Seite u zurück.

Das war mir klar, dass JS clientseitig ist. Das mit dem Popup war nur eine Idee....

Danke!

07.06.2012 - 14:58 Uhr

Ok, danke. Dachte ASP MVC würde eventuell spezielle Lösungen/Techniken mit sich bringen. Dann muss ich es über JS machen oder ist eventuell mein Ansatz mit dem Popup nicht so optimal?

07.06.2012 - 13:39 Uhr

Hallo zusammen,

ich möchte gerne aus einem Formular (Parent) ein Popup (Artikelauswahl bzw auch mit einer Suche) aufrufen. In dem Popup suche ich den entsprechenden Artikel aus bzw schränke die Ergebnisse mit einer Suche ein. Der ausgewählte Artikel (Popup schließt sich automatisch) soll dann in meiner Parent-Form in der TextBox Artikel-Nr. erscheinen.

jetzt habe ich etwas Probleme das ganze zu realisieren bzw mir fehlen die Lösungsansätze. Wäre für jede Hilfe dankbar bzw die richtigen Suchbegriffe.

MFG

03.06.2012 - 22:37 Uhr

Hallo,

ich habe folgende ViewModel


    public class CustomerViewModel
    {
...
        public List<Customer_Payment> Payments { get; set; }
        public Customer_Payment Payment { get; set; }
}

und folgende View


...
<fieldset>
            <legend>Zahlung</legend>
            <table>
                <tr>
                    <th>
                        Datum
                    </th>
                    <th>
                        Betrag EUR
                    </th>
                    <th>
                        MwSt.
                    </th>
                    <th>
                        Buchungsart
                    </th>
                    <th>
                        Geldkonto
                    </th>
                    <th>
                        Gegenkonto
                    </th>
                    <th>
                        Bemerkung
                    </th>
                </tr>
                @if (Model != null && Model.Payments != null)
                {
                    for (int i = 0; i < Model.Payments.Count; i++)
                    {
                    @Html.HiddenFor(model => model.Payments[i].PaymentId)
                    @Html.HiddenFor(model => model.Payments[i].ContractId)

                    <tr>
                        <td>
                            @Html.DisplayFor(model => model.Payments[i].CreatedDateTime, "DisplayTemplates/_Date")
                        </td>
                        <td>
                            @Html.DisplayFor(model => model.Payments[i].Amount)
                        </td>
                        <td>
                            @Html.DisplayFor(model => model.Payments[i].VatRate.Rate)
                        </td>
                        <td>
                            @Html.DisplayFor(model => model.Payments[i].DrivingSchool_Accounting_Category.Name)
                        </td>
                        <td>
                            @Html.DisplayFor(model => model.Payments[i].DrivingSchool_Accounting_CashAccount.Name)
                        </td>
                        <td>
                            @Html.DisplayFor(model => model.Payments[i].DrivingSchool_Accounting_ContraAccount.Name)
                        </td>
                        <td>
                            @Html.DisplayFor(model => model.Payments[i].Comment)
                        </td>
                    </tr>
                    }
                }
            </table>
            @Html.EditorFor(model => Model.Payment, "Person/Payment")
            <input type="submit" value="AddPayment" name="btnName" />
        </fieldset>

EditorTemplate


@model WP.FSV.WebApp.MVC.Models.Customer_Payment
<div class="editor-label">
    Datum
</div>
<div class="editor-field">
    @Html.TextBoxFor(model => model.CreatedDateTime, new { cssClass = "datePicker" })
    @Html.ValidationMessageFor(model => model.CreatedDateTime)
</div>
<div class="editor-label">
    Buchungsart
</div>
<div class="editor-field">
    @Html.DropDownList("AccountingCategoryId", (SelectList)ViewBag.AccountingCategories)
    @Html.ValidationMessageFor(model => model.AccountingCategoryId)
</div>
<div class="editor-label">
    Betrag
</div>
<div class="editor-field">
    @Html.TextBoxFor(model => model.Amount)
    @Html.ValidationMessageFor(model => model.Amount)
</div>
<div class="editor-label">
    Geldkonto
</div>
<div class="editor-field">
    @Html.DropDownList("CashAccountId", (SelectList)ViewBag.CashAccounts)
    @Html.ValidationMessageFor(model => model.CashAccountId)
</div>
<div class="editor-label">
    Gegenkonto
</div>
<div class="editor-field">
    @Html.DropDownList("ContraAccountId", (SelectList)ViewBag.ContraAccounts)
    @Html.ValidationMessageFor(model => model.ContraAccountId)
</div>
<div class="editor-label">
    MwSt.
</div>
<div class="editor-field">
    @Html.DropDownList("VatRateId", (SelectList)ViewBag.VatRates)
    @Html.ValidationMessageFor(model => model.VatRateId)
</div>
<div class="editor-label">
    Bemerkung
</div>
<div class="editor-field">
    @Html.TextBoxFor(model => model.Comment)
    @Html.ValidationMessageFor(model => model.Comment)
</div>


Controller


[HttpPost]
        public ActionResult Create(CustomerViewModel customerViewModel, String btnName)
        {
....
                    customerViewModel.Payments.Add(customerPayment);
....
 return View(customerViewModel);
}

In der View gibt es eine Zahlungs-Table (Payments) in der ich x-Sätze mit einem Submit Button in das temporäre ViewModel (CustomerViewModel) einfügen kann, bevor der Benutzer ganz am Ende den "Customer" Satz speichert.

Das funktioniert alles soweit, ausser wenn ich mehr als einen Zahlungssatz anlege. zB lege ich einen 2. oder 3. an sind alle vorherige List<E> Objekte leer bzw nulll. Nur der der letzte Satz hat gültige Werte. Ich finde einfach nicht den Fehler. Wird sicherlich eine simple Sache Sache sein. Danke!

02.03.2012 - 01:40 Uhr

Wäre auch an der Präsentation interessiert. Danke

26.02.2012 - 10:47 Uhr

Ja, habe ich....Es wird ein Post ausgelöst, deshalb steht auch in der DB der aktuelle Wert. Laut Firebug wird alles aus dem Cache gelesen, denke ihm fehlt hier der GET oder so.

Natürlich weiß ich nicht, ob mein Vorhaben generell funktioniert, deshalb auch mein Posting.

26.02.2012 - 00:37 Uhr

Hallo zusammen,

habe einen HomeController mit folgendem Code:


        public ActionResult Index()
        {
            return View();
        }

        [ChildActionOnly]
        public ActionResult EditBankChildAction()
        {
            var personBank = db.Person_Bank.Find(1);

            return PartialView(personBank);
        }

        [HttpPost]
        public ActionResult EditBankChildAction(Person_Bank bank)
        {
            var personBank = db.Person_Bank.Find(1);
            personBank.Owner = DateTime.Now.ToLongTimeString();

            db.Entry(personBank).State = EntityState.Modified;
            db.SaveChanges();

            return PartialView(personBank);
        }

Index.cshtml


<div style="float: left; width: 500px;">
    <fieldset>
        <legend>Stammdaten</legend>
    </fieldset>
</div>
<div style="float: left; width: 300px; padding-left: 30px;">
    @Html.Action("EditBankChildAction")
</div>

EditBankChildAction.cshtml


<div id="customresponse">
    @using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "customresponse" }))
    {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Bankverbindung</legend>
            <div class="editor-label">
                @Html.LabelFor(model => model.AccountNumber)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.AccountNumber)
                @Html.ValidationMessageFor(model => model.AccountNumber)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.BankCode)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.BankCode)
                @Html.ValidationMessageFor(model => model.BankCode)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.IBAN)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.IBAN)
                @Html.ValidationMessageFor(model => model.IBAN)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.SWIFT)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.SWIFT)
                @Html.ValidationMessageFor(model => model.SWIFT)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.BIC)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.BIC)
                @Html.ValidationMessageFor(model => model.BIC)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.Owner)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Owner)
                @Html.ValidationMessageFor(model => model.Owner)
            </div>
            <p>
                <input type="submit" value="Save" />
            </p>
        </fieldset>
    }
</div>

Mein Problem ist jetzt sobald ich den Submit Button drücke, dass die Partial View nicht neu aufgebaut/aktualisiert wird. In meinem rudimentären Test-Szenario schreibe ich die Uhrzeit bei Owner rein, aber auf der gerenderten HTML Seite steht nur die Zeit seit dem "letzten Seitenaufruf", also nicht die Zeit als ich den Submit Button geklickt habe. Ein Ajax.BeginForm brachte ebenfalls nichts (siehe Code)...

Wäre für jede Hilfe dankbar.

25.02.2012 - 22:13 Uhr

Stimmen deine Namespaces noch?

Also in den Views gibt es keine Namespace und im Controller gibt es keine Verweise auf den Views Ordner....

25.02.2012 - 17:34 Uhr

Hallo,

damit ich meinen View Ordner etwas strukturierter habe möcht eich gerne Unterordner.

Bsp


Controllers
Models
Views
 - Customer
   - Contact
   - Address
   - usw.

anstatt


Controllers
Models
Views
 - Customer
 - Contact
 - Address
 - usw.

Wenn ich den Contact und Address Ordner in den Customer verschiebe sagt mir der entsprechende Controller, dass er die View nicht findet.

Geht mein Vorhaben allgemein nicht? Oder gibt es einen Workaround? Danke

MFG

24.02.2012 - 08:58 Uhr

Hallo zusammen,

danke für die Ansätze. Habe zwischenzeitlich noch einen anderen MVC Trainer interviewt und hat ein paar gute Argumente/Ansätze genannt.

  1. Cookies. Nachteil: auf 1024KB begrenzt. Cookie-Hi-Jacking Gefahr

  2. HTML5 Web Storage

  3. HTML5 Indexed Database API

  4. Datenbank. Nachteil: Datenleichen...diese sollte man dann regelmäßig bereinigen

24.02.2012 - 00:02 Uhr

Hallo zusammen,

bin etwas neu in dem MVC Thema, aber ist meiner Meinung nach eine klasse Sache. Dennoch habe ich gerade ein Problem mit der ID in der URL. Ich möchte nicht das jemand einfach Daten von jemanden anderen sieht/manipuliert in dem mer einfach die ID in der URL ändert. Hat jemand best practise Erfahrungen? Habe bereits gegoogelt u einige hatten die selbe Frage, aber als Antwort kam in der Regel nur, dass es den Login gibt, aber damit abe ich nur den Fall für unregstrierte User abgefangen. Danke

21.02.2012 - 11:37 Uhr

Hallo zusammen,

ich stehe gerade vor dem Problem, dass ich nicht genau weiß wie ich den Warenkorb zwischenspeichern soll. Unter ASP .NET Webforms hätte ich den Warenkorb in einer Session abgespeichert, aber unter MVC soll man ja eher Stateless arbeiten. Nun stellt sich für mich die Frage wohin damit, wenn nicht in einer Session. Ich muss ja mehr oder weniger von jeder Seite an meinen Warenkorb rankommen. Danke!

MFG

07.12.2011 - 20:03 Uhr

Hallo,

seit kurzem beschäftige ich mich mit MVC, komme aber eigentlich aus der ASP .NET Welt. Das MVC Prinzip ist mir soweit klar geworden, allerdings habe ich noch ein paar Anlaufprobleme "simple" Sachen zu lösen.

zB habe ich eine Checkbox und sobald man diese anklickt möchte das eine Action ausgelöst wird. Bei ASP. NET war das relativ einfach über ein Postback und Checked Event lösbar, aber bei MVC stehe ich gerade etwas ratlos. Muss ich über ein JS oder so immer ein SUBMIT FORM auslösen?

Das Gleiche ebenfalls bei der Auswahl eines Items aus einer DropDownList..

Was ist wenn ich mehrere Buttons auf einer Form habe? Muss ich um jeden Button ein FORM machen oder wie löst man das "elegant"?

Vielen Dank im Voraus!!!!

23.11.2011 - 21:06 Uhr

Was kostet denn die Prüfung? Danke

26.10.2011 - 03:35 Uhr

Hallo,

ich habe ein XML File in der ich in der Regel nach ArtNr (artikelnr = 007000999) suche, aber es kann man vorkommen, falls meine Quelle keine ArtNr besitzt ich nach einem anderen Kriterium suchen muss (gruppe=A). Dieses XML Tag ist aber verschachtelt (Gruppen) und weiß ich nicht wie ich via LINQ danach suchen kann.

XML:


<artikel id="3203">
<Gruppen>
<gruppe>A</gruppe>
<gruppe>B</gruppe>
<gruppe>C</gruppe>
</Gruppen>
<artikelnr>007000999</artikelnr>

Mein Code:


  articles = from article in xml.Descendants("artikel")
                                   where (String)article.Element("artikelnr") == artikelNr
                                   select article;

Danke

02.10.2011 - 20:41 Uhr

Hallo, kann jemand ein gutes Tool um WSDL Dokumentationen zu erstellen?

zum Testen nutze ich zb SOAPUI und damit kann auch auch Dokus erstellen, aber da meine WSDL XSD Imports verwendet, werde diese komischerweise nicht korrekt in der Doku dargestellt.

Danke

MFG

18.09.2011 - 21:01 Uhr

Hi, guck mal auf welche IP dein Client in der VM zugreifen will und ob die Daten auch passen. Ebenfalls würde ich mal ein TELNET absetzen...

14.09.2011 - 12:19 Uhr

VS mal resettet? mit

devenv.exe /resetskippkgs
24.08.2011 - 10:33 Uhr

Du hast Recht. Danke. Kann ich das ganze irgendwie Global bzw. über das T4 Template abwickeln? Sonst müßte ich jede Entität einzel anpassen.

Danke

24.08.2011 - 10:13 Uhr

Also ich arbeite mit

ADO.NET POCO ENTITY GENERATOR und EF4, deshalb gibt es auch keinen Person() Constructor mit Default-Values. Danke

24.08.2011 - 08:54 Uhr

Würde ich dir normalerweise zustimmen, aber das POCO erstellt alls in

public virtual...

Bsp:

 	[DataMember]
        public virtual int PersonId
        {
            get;
            set;
        }
    	[DataMember]
        public virtual Nullable<System.DateTime> BirthDate
        {
            get;
            set;
        }
24.08.2011 - 08:17 Uhr

verwendetes Datenbanksystem: SQL Server 2008

Hallo zusammen,

gibt es eine Möglichkeit den Propertys einen Default-Value zu geben? Konnte jetzt auf Anhieb nichts in Google finden.

Danke

23.08.2011 - 09:53 Uhr

Hallo, ich habe einen FileSystemWatcher der ein Verzeichnis überwacht und je nach File-Extension verschiedene Transaktionen durchführt. Nun möchte ich für das Log noch wissen, wer die Datei in die Verzeichnis-Überwachung kopiert hat. Leider habe ich über google nichts gefunden. Ist das überhaupt dann möglich? Alle Benutzer sind im Active Directory. Danke

14.08.2011 - 19:58 Uhr

Hallo gfoidl,

ich habe neue Erkenntnisse. Meinen Dienstverweis mache ich über "VS rechte Maustaste" im Projekt. Selbst mit dem Konfigurator hatte ich immer noch den gleichen Fehler.
Habe dann wieder rumgegoogelt und bin auf folgende Seite gestoßen How To: Create a Windows Communication Foundation client. Habe mir dann mit dem Befehl:

svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config http://localhost/PocoWcfService/Service1.svc

die ProxyKlasse erstellt und die Files generatedProxy.cs und app.config in mein Client Projekt kopiert. Den alten Dienstverweis rausgehauen und siehe da ich habe meine List Person_Bank bekommen.

Jetzt ist die Frage warum das so ist... Habe auch im Anschluß den MS WCF-Testclient gestartet und bekam die Exception. Sieht im Moment wirklich so aus als würde es nur funktionieren, wenn ich mir eine Proxy-Klasse generiere.

Danke im Voraus!

14.08.2011 - 13:53 Uhr

Hallo gfoidl,

danke für den Hinweis. Habe auch schon darüber nachgedacht, ob es daran liegen könnte, aber die Theorie habe ich verworfen, weil der gleiche Fehler auch beim integrierten "MS WCF-Testclient" auftritt.

Werde jetzt aber die Client Config mal mit dem "WCF Service Configuration" selbst erstellen.

14.08.2011 - 02:25 Uhr

verwendetes Datenbanksystem: SQL Server 2008
VS2010, Win7, x64, .NET 4, IIS 7.5

Hallo zusammen,

komme im Moment nicht weiter und habe Google soweit durch, deshalb ist das hier meine letzte Anlaufstelle.

Zur Zeit habe ich in meiner Projektmappe folgende Projekte:

  • PocoTemplate (FsvModel.edmx, FsvModel.Context.tt)
  • PocoTemplateEntities (FsvModel.tt)
  • PocoWcfService (IService1.cs, Service1.svc)
  • PocoWcfServiceConsoleClient (Program.cs)

Das POCO habe ich mit der VS Extension erstellt.
Sämtliche Projekte laufen unter .NET 4.0 und der WCF unter dem IIS 7.5.


    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        Person GetData();
    }


 public class Service1 : IService1
    {
        public Person GetData()
        {
            using (var context = new FsvContainer())
            {
                context.ContextOptions.LazyLoadingEnabled = false;
                context.ContextOptions.ProxyCreationEnabled = false;

                try
                {
                    var people = context.People.Include("Person_Bank");


                    var query = context.People.Include("Person_Bank").FirstOrDefault();
                    //var query = context.People.AsEnumerable().FirstOrDefault();

                    return query;
                }
                catch (Exception exception)
                {
                    throw;
                }
            }
        }


<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="FsvContainer" connectionString="metadata=res://*/FsvModel.csdl|res://*/FsvModel.ssdl|res://*/FsvModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.;Initial Catalog=FSV;Persist Security Info=True;User ID=XXX;Password=XXX;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "d:\logs\wcf6.svclog" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
  <system.serviceModel>
    <services>
      <!-- Hinweis: Der Dienstname muss dem Konfigurationsnamen für die Dienstimplementierung entsprechen. -->
      <service name="PocoWcfService.Service1" behaviorConfiguration="MyServiceTypeBehaviors" >
        <endpoint address="" binding="wsHttpBinding" contract="PocoWcfService.IService1" bindingConfiguration="wsHttpBindingNoSCT">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpBindingNoSCT">
          <security mode="None">
            <transport clientCredentialType="None"/>
            <message establishSecurityContext="false"/>
          </security>
        </binding>
        <binding name="AnonymousBinding">
          <security mode="None">
            <transport clientCredentialType="None" />
            <message clientCredentialType="None" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors" >
          <!-- Legen Sie den Wert unten auf "false" fest, um die Veröffentlichung von Metadateninformationen zu vermeiden, und entfernen Sie den Metadatenendpunkt oben vor der Bereitstellung. -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- Damit in Fehlern Ausnahmedetails zum Debuggen angezeigt werden, legen Sie den Wert unten auf "true" fest. Legen Sie ihn vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Ausnahmeinformationen zu vermeiden. -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

Ich bekomme es nicht die 1:n Beziehungen zu dem Objekt Person zu laden zB "Person_Bank" usw. Ich bekomme jedes mal eine Exception. Wenn ich ohne den "include" arbeite kann ich den Service fehlerfrei aufrufen, aber bekomme natürlich nur das Objekt Person, ohne "Person_Bank" usw.

Diese Meldung bekomme ich, wenn ich über eine Console den Service aufrufe:> Fehlermeldung:

Fehler beim Empfangen der HTTP-Antwort für
>
. Die Ursache kann sein, dass die Dienstendpunktbindung kein HTTP-Protokoll verwendet. Eine andere mögliche Ursache ist, dass der HTTP-Anforderungskontext vom Server abgebrochen wird (vermutlich auf das Herunterfahren des Diensts zurückzuführen). Weitere Informationen finden Sie in den Serverprotokollen.

 static void Main(string[] args)
        {
            Service1Client  service1Client = new Service1Client();
            var person = service1Client.GetData();

        }

generierte app.config


<?xml version="1.0"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IService1" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
                    <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
                    <security mode="None">
                        <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"/>
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost/PocoWcfService/Service1.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1" contract="PocoServiceReference.IService1" name="WSHttpBinding_IService1">
                <identity>
                    <dns value="localhost"/>
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>


WCF Log:> Fehlermeldung:

<Exception>
<ExceptionType>System.ServiceModel.FaultException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>Die Nachricht mit Action "http://schemas.xmlsoap.org/ws/2004/09/transfer/Get" kann aufgrund einer fehlenden ContractFilter-Übereinstimmung beim EndpointDispatcher nicht verarbeitet werden. Mögliche Ursachen: Vertragskonflikt (keine Action-Übereinstimmung zwischen Sender und Empfänger) oder ein Bindung/Sicherheit-Konflikt zwischen dem Sender und dem Empfänger. Stellen Sie sicher, dass Sender und Empfänger über den gleichen Vertrag und die gleiche Bindung verfügen (einschließlich Sicherheitsanforderungen, z. B. "Message", "Transport", "None").</Message>
<StackTrace>
bei System.ServiceModel.Dispatcher.ErrorBehavior.ThrowAndCatch(Exception e, Message message)
bei System.ServiceModel.Dispatcher.ChannelHandler.ReplyFailure(RequestContext request, Message fault, String action, String reason, FaultCode code)
bei System.ServiceModel.Dispatcher.ChannelHandler.ReplyContractFilterDidNotMatch(RequestContext request)
bei System.ServiceModel.Dispatcher.ChannelHandler.EnsureChannelAndEndpoint(RequestContext request)
bei System.ServiceModel.Dispatcher.ChannelHandler.TryRetrievingInstanceContext(RequestContext request)
bei System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext)
bei System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)
bei System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)
bei System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
bei System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
bei System.Runtime.InputQueue1.AsyncQueueReader.Set(Item item) bei System.Runtime.InputQueue1.EnqueueAndDispatch(Item item, Boolean canDispatchOnThisThread)
bei System.Runtime.InputQueue1.EnqueueAndDispatch(T item, Action dequeuedCallback, Boolean canDispatchOnThisThread) bei System.ServiceModel.Channels.SingletonChannelAcceptor3.Enqueue(QueueItemType item, Action dequeuedCallback, Boolean canDispatchOnThisThread)
bei System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext context, Action callback)
bei System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult result)
bei System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()
bei System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()
bei System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state)
bei System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
bei System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)
bei System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
</StackTrace>
<ExceptionString>System.ServiceModel.FaultException: Die Nachricht mit Action "http://schemas.xmlsoap.org/ws/2004/09/transfer/Get" kann aufgrund einer fehlenden ContractFilter-Übereinstimmung beim EndpointDispatcher nicht verarbeitet werden. Mögliche Ursachen: Vertragskonflikt (keine Action-Übereinstimmung zwischen Sender und Empfänger) oder ein Bindung/Sicherheit-Konflikt zwischen dem Sender und dem Empfänger. Stellen Sie sicher, dass Sender und Empfänger über den gleichen Vertrag und die gleiche Bindung verfügen (einschließlich Sicherheitsanforderungen, z. B. "Message", "Transport", "None").</ExceptionString>
</Exception>

Hatte auch zwischendurch mal andere Fehlermeldungen gehabt, da ich durch ein paar Google Einträge darauf gestoßen bin in meinem T4 Template mit


[DataContract]
[DataContract(IsReference=true)]
[DataMember]

zu arbeiten, aber hat auch nciht funktioniert. Es kamen wieder andere Fehlermeldungen. Dann habe ich es auch mit "ApplyDataContractResolverAttribute" versucht oder "CyclicReferencesAwareContractBehavior"

Ich denke der Fehler muss irgendwo bei der Serialisierung liegen, aber weiß im Moment nicht mehr weiter.

Wäre für jeden weiteren Tip sehr dankbar!

13.08.2011 - 23:37 Uhr

Hallo zusammen,

durch einen Thread hat mir Abt ein paar gute Tips gegeben wie ich meine Problematik lösen könnte (Repository Pattern und UnitOfWork) und es kam so rüber als wären die Lösungsansätze das normalste der Welt 😃

Nun würde ich gerne wissen wie wo ihr so eure Infos bekommt was gerade so aktuell ist usw. wie zB Repository Pattern und UnitOfWork. Wenn man speziell danach googelt findet man unzählige Ergebnisse, aber erst einmal auf diese "Begrifflichkeiten" zu kommen ist jetzt meine Frage 😃

Danke

02.08.2011 - 09:04 Uhr

verwendetes Datenbanksystem: SQL Server 2008

Hallo zusammen,

ich verwende EF4 und habe in einer externen Klassenb. ein POCO erstellt. In der Model.tt habe ich einige Änderungen nach den Vorgaben in How to change T4 POCO Templates of EF 4 for WCF? vorgenommen bzgl. der Serialisierung im WCF. Dies klappt soweit auch, das einzige was für mich noch nicht sauber ist, wenn ich 1:n Beziehungen haben. Im WCF bekomme ich kein NULL Objekt, sondern eine Collection mit der Länge 0 Items. Sieht noch etwas unschön aus. Weißt jemand welche Anpassung ich im T4 Template noch machen muss um dies zu umgehen? Vielen Dank!!!!

28.07.2011 - 15:35 Uhr

verwendetes Datenbanksystem: MSSQL 2008

Hallo, ich nutze .NET 4 EF und habe noch eine Unklarheit. Es existiert eine "DS" die mehrere FK auf die Tabelle Person hat:

  • PersonId
  • OwnerPersonId
  • ManagingDirectorPersonId

Die Schlüssel heißen:
FK_DS_Person
FK_DS_OwnerPerson
FK_DS_ManagingDirectorPerson

Im EDXM Designer wird mir allerdings unter den Navigationseigenschaften der Tabelle:
Person
Person1
Person2

angezeigt. Weißt jemand warum? Ich könnte das zwar im Designer per Hand ändern, aber sobald ich mal Änderungen habe und ein EDMX Update mache muss ich das wieder per Hand nachziehen. Wenn ich natürlich jetzt mit dem Objekt "DS" arbeite steht DS.Person, DS.Person1, DS.Person2. In dem Fall weiß ich gar nicht was was ist.

Danke

25.07.2011 - 17:08 Uhr

Hallo Abt,

dein Lösungsansatz hört sich sehr interessant an, deshalb habe ich einige Zeit darüber gegoogelt. Allerdings haben sich währenddessen noch einige Fragen ergeben, die du mir eventuell kurz beantworten könntest.

Zur Zeit arbeite ich nicht mit dem EF, deshalb müßte ich das ganze "umstellen", damit ich den DbContext nutzen kann oder?

Habe mir so einige Beispiele bzgl. Repository u UOW angeguckt. Allerdings war dort nie der Layer "WebService" dazwischen. Das Repository hat immer auf den DataLayer zugegriffen. In meinem Fall wäre es doch der WCF WebService?

Also wie ich das verstehe würde ich den Rollback im WCF Service machen oder? aber dann würde ich alles was im Controller ist in den Service auslagern müssen, sprich bei CreateCustomer (->createPerson -> createBank ->createContact usw.)

Danke

25.07.2011 - 08:38 Uhr

Hallo,

ich benötige einige Ansatzhilfen für folgende Problemstellung.

Ich habe einen WCF WebService mit mehreren Services und n-Methoden.

Datenbank: SQL Server 2008
zB. PersonService: CreatePerson, CreateBank, CreateContact usw.
CustomerService: CreateCustomer

Jede Methode erstellt eine ADO DB Connection und schließt sie am Ende wieder.

Jetzt habe ich als weitere Schicht einen Controller, der die WebServices aufruft und dort eine CreateCustomer Methode erstellt. Diese erstellt zuerst die Person, anschließend die Bankdaten und Kontaktdaten und am Ende den Customer. Funktioniert so alles wunderbar, bis auf die Tatsache, wenn zB bei CreateContact ein Fehler ausgelöst wird. Dann sind zB die Tabellen Person und Person.Banks bereits mit Daten gefüllt. Diese muss ich aber irgendwie wieder löschen (Rollback). Natürlich könnte ich mir von jedem erstellen Satz die Unique Id zurückgeben lassen die erstellt worden ist und manuell löschen, aber das erscheint mir ersten Moment etwas umständlich, da ich noch andere Methoden und Services habe wo das gleiche Schema ist.

Wie könnte ich das mit Transaction Rollback realisieren, da ich die Connection bei jeder Methode wieder schließen. Danke

20.07.2011 - 16:36 Uhr

Hallo zusammen,

habe mir anhand des Tutorial http://zeeshanumardotnet.blogspot.com/2010/11/how-to-keep-session-alive-in-aspnet.html

ein Keep Alive WebService gebastelt...wenn ich jetzt meine Seite Aufrufe

http://localhost/Demo.App/login.aspx dann funktioniert das perfekt. Ebenfalls wenn ich nach dem Login auf http://localhost/Demo.App/default.aspx lande, aber sobald ich auf bestimmte "ASP Ordner" komme wie zB http://localhost/Demo.App/Customer/overview.aspx dann funktioniert der WS Call nicht mehr. Ich erhalte dann den Fehler

Laufzeitfehler in Microsoft JScript: Objekt erwartet .

Denke er kommt nicht mit dem Aufruf klar:

url: "SessionAlive.asmx/UpdateSession",

,

aber selbst wenn ich

http://localhost/Demo.App/SessionAlive.asmx/UpdateSession

nutze funktioniert es auch nicht. Hat jemand einen Tip? Danke

27.06.2011 - 23:40 Uhr

Hallo,

ich möchte gerne für eine von mir entwickelte Software, eine Importschnittstelle von der Konkurrenz anbieten. Also das ich die Daten von der Konkurrenz in mein Programm einspielen kann. Soweit ich gesehen habe basiert die Konkurrenzsoftware auf Access und ist mit einem Passwort versehen. Dies zu umgehen ist das kleinste Problem. Jetzt würde ich gerne wissen wie das rechtl. aussieht? Die Daten in der Access DB sind ja einerseits dem Kunden, aber das ist sicherlicher nur eine Seite der Geschichte oder? Vllt hat jemand bereits in diesem Thema Erfahrungen gemacht? Danke

30.05.2011 - 08:59 Uhr

Hallo,

ich habe ein WebProjekt mit mehreren Klassenbiliothkesprojekte und jeder dieser Projekte hat seine eigene web.config. Wenn ich jetzt die WebApp veröffentliche, sehe ich im BIN Ordner nur die Klassen DLL, aber bspw nicht databasemanager.dll.config.

Es kommt mir so vor, als würde er die app.config Inhalte in die DLL kompilieren. Kann mir jemand bitte helfen? Google habe ich nicht passendes gefunden. Danke

17.05.2011 - 09:49 Uhr

Hallo,

ich habe in einem WebService-Projekt 2 Services:

  • CustomerService
  • InvoiceService

In jedem Service gibt es bei jeder Methode ein "Auth" Objekt bzw Eingangs-Parameter. Wenn ich nun in meiner Webanwendung die 2 Services einbinde, hat der CustomerService und InvoiceService 2 unterschiedliche Auth-Objekte (CustomerService.Auth, InvoiceService.Auth), obwohl das Auth Objekte in den Services über eine Klassenbibliothek eingebunden ist, sprich im "Background" ist es das ein und das selbe Objekte. Jetzt weiß ich nicht, wie ich in der WebApp nur EIN einziges Objekt nutzen kann.

Anderes Bsp. wäre, wenn ich in den 2 Services, ein Objekte CustomerInfo benutze. Wenn ich nun eine INstanz erstelle mit dem Namespace von CustomerService, dann kann ich dieses Objekt nicht einfach in einen WebService-Methodenaufruf von InvoiceService nutzen.

Danke

09.05.2011 - 08:30 Uhr

Hallo zusammen,

bin zur Zeit an einer Intranet-Anwendung dran, aber ich bin mir nicht so sicher wie ich Daten von einem Formular an das andere übergeben soll

z.B

  1. URL Parameter verschlüsselt
  2. Session

Bei Session ist ist meiner Meinung nach der Nachteil, dass ich immer dafür Sorgen muss das sämtliche Session von dem Formular irgendwann später gelöscht werden sollen. Wie händelt ihr so etwas ?

Danke