Laden...

Forenbeiträge von Ahrimaan Ingesamt 350 Beiträge

10.03.2015 - 16:11 Uhr

So ich habe jetzt alles durch und es liegt am MultipartStreamProvider : Ich wrappe das ganze um es testbar zu machen.
Leider funktioniert das ganze nicht so richtig.
Deswegen erstmal hier zu

Grüße

10.03.2015 - 16:01 Uhr

Bitte verwende die Objekt-orientierte Programmierung wie sie gedacht ist; teile Einzelaufgaben der Methode in weitere Methoden auf und teste somit kleinere Stücke und dann das Gesamtbild.
Evtl. auch mal Dependency Injection anschauen, verstehen und verwenden 😉

Aber so setzt Du nicht das Testen um, wie man es eigentlich macht.
Wie man asynchronen Code testet steht übrigens sehr sehr ausführlich in der MSDN.

Hallo Benjamin,

wirkt etwas herablassend wen man nicht den ganzen Code sieht.

Alle externen Services sind per DI in den WebApi Controller injiziert. DI ist definitv meine 100% Arbeitsweise 😉

Zweitens habe ich das nur so formatiert, bzw umgeschrieben damit man sieht was da passiert, quasi ein beispiel.

Und wenn du die MSDN testweise meinst: Auch diese verursaxcht genau das selbe Problem...

10.03.2015 - 14:41 Uhr

Hallo zusammen,

ich habe einen WebApi Post wo ich eine Datei hochlade :

        public async Task<Models.FileUploadResult> Post()
        {
            var clientIp = this.GetClientIp();
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                return new Models.FileUploadResult { ResultText = FileResult.CorruptPdf.GetTranslation() };
            }

            var result = new Models.FileUploadResult();
            var provider = this.providerFactory.GetProvider();
            try
            {
                var multipartResult = await Request.Content.ReadAsMultipartAsync(provider);
                if (multipartResult.Contents.Count > 0)
                {
                    var fileContent = multipartResult.Contents.FirstOrDefault();
                    var contractNumber = Request.Headers.FirstOrDefault(x => x.Key == "Contract-Number")
                                                .Value.FirstOrDefault();

                    var fileType = Request.Headers.FirstOrDefault(x => x.Key == "File-Type")
                                                .Value.FirstOrDefault();
                    if (fileContent != null && !string.IsNullOrEmpty(contractNumber) && !string.IsNullOrEmpty(fileType))
                    {
                        var fileData = await fileContent.ReadAsByteArrayAsync();
                        var fileScanResult = this.fileService.ScanAndValidateFile(fileData,contractNumber,fileType);
                        result.ResultText = fileScanResult.Result.GetTranslation();
                        result.FileId = fileScanResult.FileId;
                    }
                    else
                    {
                        result.ResultText = string.IsNullOrEmpty(result.ResultText) ? FileResult.Faulted.GetTranslation() : result.ResultText;
                        this.logger.Error(string.Format("Upload from file broken. Result:{0} , IP:{1}, StackTrace:{2}", result.ResultText, clientIp, "fileContent or file was empty"));
                    }
                }             
            }
            catch(Exception e)
            {
                result.ResultText = string.IsNullOrEmpty(result.ResultText) ? FileResult.Faulted.GetTranslation() : result.ResultText;
                this.logger.Error(string.Format("Upload from file broken. Result:{0} , IP:{1}, StackTrace:{2}", result.ResultText, clientIp, e.StackTrace));
            }

            this.logger.Info(string.Format("Uploaded File with Result:{0} , IP:{1}", result.ResultText, clientIp));
            return result;
        }

So weit so schön, klappt auch super !
Nur wenn ich das ganze nun testen soll, bricht er bei

var multipartResult = await Request.Content.ReadAsMultipartAsync(provider);

ab.
Der Testaufruf sieht erstmal so aus :

Task.Run(async () =>
            {
                this.sut.Post();
            }).GetAwaiter().GetResult();

Ich gehe davon aus, dass er beim Await einfach abbricht weil der Task für ihn dann zuende ist.
Kann das sein ? Und wenn ja wie behebe ich das Problem ?

Grüße

20.02.2015 - 13:16 Uhr

Wie wäre es eine Art Delay einzubauen ? Du wartest x Sekunden und prüfst ob der Stick noch da ist.
Wenn ja, starte das externe Programm.

18.02.2015 - 17:19 Uhr

Hallo zusammen,

danke für die Vorschläge, das Manifest scheint meine Hoffnung zu sein.
Das mit dem TemplateCache habe ich probiert, leider hat es bei mir gar nicht gegriffen.

Grüße
Pawel

18.02.2015 - 16:46 Uhr

Hallo zusammen,

ich habe das Problem, dass Directiven bei uns dermaßen vom Browser gecached werden, dass aktualisierungen an den sourcen nicht zum Kunden kommen.

Es gibt den Workaround, dass man die Dev Konsole öffnet und kurz das Caching ausstellt.
Das ist aber für Kunden keine praktiable Lösung.

Hat jmd ne Idee wie das am besten geht ?

16.02.2015 - 08:12 Uhr

Bisher konnte ich, kommend aus der .Net Welt nie so richtig in die PI-Programmierung reinfuchsen.

Wieso nicht? Auf dem Raspberry läuft Mono.... Selbst die GPIO-Pins kannst Du direkt aus C# ansprechen:
>

Bye,
Michael

Hi Michael,

konntest du bereits Erfahrung mit der Libary sammeln ? Lohnt sich das oder soll ich lieber "nativ" auf die GPIO etc zugreifen ?

16.02.2015 - 08:07 Uhr

Du durchläufst es mit einer foreach und benutzt dennoch ein Index ? Du kannst doch wie in deinem Beispiel direkt per "name" auf den jetzigen task in der Schleife zugreifen.

Es fehlt wohl an Grundlagen siehe 1.1.1
[Hinweis] Wie poste ich richtig?

13.02.2015 - 21:14 Uhr

Okay dann versteh ich aber nich warum ^^

Also ich hab das ItemsSource Property von einem ItemsControl an die Collection gebunden.
Wenn in der Collection nun aber nich die Controls drin sind, sonder nur die VM´s ... wie wird das dann angezeigt?

Du sagst deinem XAML wie ein VM dargestellt wird.

http://www.codeproject.com/Articles/819294/WPF-MVVM-step-by-step-Basics-to-Advance-Level

EDIT: Der hier is besser https://msdn.microsoft.com/en-us/library/gg430857%28v=pandp.40%29.aspx

05.02.2015 - 16:09 Uhr

gebe ich dir Absolut recht wenn man als ersten Satz "War klar dass dieses Argument kommt"
Was erwartest du dann ? Sachlichkeit ? So wie man in den Wald, so ....
Aber den Satz kennst du hoffentlich !

EDIT: Belassen wir es dabei, evtl. ging der erste Satz von dir auch zu persönlich und wirkte etwas herablassend. Wie du siehst habe ich bereits vorhin meinen Post editiert

05.02.2015 - 16:00 Uhr

Ich rede vom Arbeitspeicher , da liegt Raspbian bei Betrieb bei 4 MB Core

Egal schauen wir mal wie sich das entwickelt. Ich bleibe bei MS immer sehr skeptisch.

05.02.2015 - 15:44 Uhr

Alleine wenn das CoreOS zuviel Speicher einnimmt wird es uninteressant.
Soviel Speicher hat der Pi 2 auch nicht.
Wie gesagt ich glaube nicht, dass es MS schafft ein schmales Windows zu bauen, was mir soviel Speicher übrig lässt, dass sich der Pi2 lohnt mit Windows zu betreiben

05.02.2015 - 15:40 Uhr

Es ist kein fettes Windows, sondern Windows 10 On Devices.
Das ist in etwa die gleiche Verwandtschaft wie Windows 7 mit Windows 7 Embedded. Wer das als "gleich" bezeichnet sollte sich nochmals auf sein Hosenboden setzen und lesen.

Entschuldigung , selbst ein "embbeded" Windows wird kaum auf die schmalheit eines Linux kommen.
Kann mir keiner Erzählen, dass das Microsoft je geschafft hätte, siehe Windows Core Server

05.02.2015 - 15:35 Uhr

Wenn ich mit .NET entwicklen möchte hole ich mir Netduino.
Ansonsten kann man auch per Nodejs auf zB z-wave zugreifen per Raspberry

Aber mal ehrlich : Will ich darauf ein fettes Windows 10 laufen haben ? Ich denke eher nicht

27.01.2015 - 08:27 Uhr

Cool weiter so ! 😃

21.01.2015 - 13:37 Uhr

Die Community Edition ist for free , nicht die Enterprise mit vollem Support

07.01.2015 - 15:25 Uhr

Hi Benjamin,

danke für deine Antwort, ok das mit dem 304 habe ich verschwiegen 😉

Der Rest ist klasse, dann schmeiße ich das mal aus unserem Projekt raus.

Grüße

07.01.2015 - 15:16 Uhr

Habe im ISS den Cache nun angemacht und die js hat nun korrekt 304.
Aber warum sind die Bundles so schlecht ?

07.01.2015 - 15:08 Uhr

Hallo zusammen,

ich habe ein Problem : Per BundleConfig habe ich JS Dateien eingebunden.
Diese werden bei wirklichm JEDEM Page Refresh neu geladen.
Das hat zwei Nachteile : Bei jedem Wechsel der Seite werden die Angular Variablen kurz angezeiogt und der Aufbau der Seiten dauert länger.

Ich habe in der Web.Config
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="10.00:00:00"/>
</staticContent>

eingestellt.
Gibt es noch etwas was ich vergessen/übersehen habe ?

Grüße

27.11.2014 - 09:48 Uhr

Doof Frage :

Warum nutzt du nicht WCF welches von Haus aus SOAP 1.1 und 1.2 macht ?

Damit würdest du den ganzen "händischen Kram" weglassen, welcher sowieso nicht sauber ist.

13.11.2014 - 10:26 Uhr

Nicht nur das,
auch das .NET Framework wird Open Source !

Great News for .NET Developers (Microsoft hat angekündigt, die .NET-Core Libraries und die .NET CLR Open Source zur Verfügung zu stellen)

03.11.2014 - 12:06 Uhr

Was genau hast du schon probiert ?

			var settings = new XmlReaderSettings
			{
				ValidationType = ValidationType.Schema
			};
			settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
			settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
			settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
			var schemaSet = new XmlSchemaSet();
			schemaSet.Add(null, xsdPath);
			schemaSet.Compile();
			settings.Schemas.Add(schemaSet);

			settings.ValidationEventHandler += (a, b) =>
				{

				};

			var reader = XmlReader.Create(new StringReader(content), settings);

			while (reader.Read())
			{

			}

?

29.10.2014 - 10:42 Uhr

Hallo,

wenn du deine DB nicht lokal hast, schreibst du für deine App einen WebService.
Die App verbindet sich mit dem WebService und diese darf dann auf die DB Zugreifen.

Nix TCP/IP sondern simples http JSON Serialisiert.

Grüße

28.10.2014 - 08:48 Uhr

Hi,

es ist leider nicht direkt eine Lösung, eher ein Workaround:

Im IDispatcherMessageInspector schmeist man keine Exception sondern schreibt mithilfe von
OperationContext.Current.IncomingMessageProperties seine Property in den Context.

Wenn man dann im eigtl. ServcieContract angekommen ist, übergibt man den Context zB in eine Hilfsklasse und prüft seine bedingungen ob alle "Prüfroutinen" durchgelaufen sind und reagiert dort mit einem korrektem Rückgabemodel.

Ich suche immer noch eine "schönere" Lösung, sobald ich was habe poste ich diese sonst gerne

Grüße
Ahrimaan

27.10.2014 - 19:27 Uhr

Also der IErrorHandler scheint nicht das zu können was ich brauche.
Werde/Habe es nun anders gelöst

27.10.2014 - 13:37 Uhr

Hallo zusammen,

ich habe einen IErrorHandler geschrieben,
welcher den SOAP Header ausliest und wenn der username/Passwort nicht da/ falsch/ irgendwas nicht passt wird eine Rückantwwort gegeben.

public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
        {
            Contract.Assume(fault != null);

            if (error.Message.Contains("There is not a header with name AuthenticationHeader")
				|| error.Message.Contains("Unknown Username or Incorrect Password"))
            {
	            var resp = new Response{ returnCode = "7", returnText = ErrorMessages.ReturnMessage_7 };

	            fault = Message.CreateMessage(version ?? MessageVersion.Default, "Fault", resp);
            }
        }

Wenn ich das zurückgebe, kann er am Client das Response Model nicht richtig Mappen.
Wenn ich ohne IErrorHandler arbeite und nur das Model in dem Service zurückgebe, klappt es.

Ich tippe also darauf, dass der Fehler im Message.CreateMessage liegt.

Jmd ne Idee ?

Grüße

24.10.2014 - 11:49 Uhr

Ich halte ja mehr von der WebApi, aber das passt nicht mehr in den Thread.
Problem ist ja nun zum Glück gelöst 😃

24.10.2014 - 11:47 Uhr

Hallo Benjamin,

ich halte allgemein nix von WCF , Configuration Hell.
Problem ist wir müssen es nutzen oder alte asmx WebServices.
Und wir müssen gewisse Parameter vorgeben.

ich habe das Probelm aber nun gelöst :
Im Service Namen muss die implementierung des Services eingetragen werden.

Grüße
Ahri

24.10.2014 - 11:16 Uhr

Neue Beobachtung:

Egal welcher Service/Client : im BasicHttpBinding muss ein Binding ohne Namen sein, sonst nimmt er gar kein Binding....

Ich verzweifel langsam

24.10.2014 - 10:57 Uhr

Probiert habe ich auch schon,dass ich beim ServiceContract den namen entferne, sodass er nur den Contract in der Config sucht, ohne Namen.
Hilft auch nicht, das Endpunktbinding wird ignoriert

24.10.2014 - 10:24 Uhr

ConfigurationName entspricht dem ContractName (contract="meinAppContract") und nicht der ServiceName.

Hi Abt,

sorry da habe ich beim ersetzen durch anonyme namen einen Fehler gemacht. Bei uns ist der SeviceName = dem Confignamen

Grüße

24.10.2014 - 10:08 Uhr

Hallo zusammen,

ich hab ein Problem : IIS 7.5 WCF Service , konfiguriert in der Web.Config

Das ServiceInterface sieht so aus :

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ServiceModel.ServiceContractAttribute(Namespace="meinNS", ConfigurationName="meinService")]
    public interface meinAppContract

Die Config sieht so aus :

<services>
      <service name="meinService">
        <endpoint binding="basicHttpBinding" bindingConfiguration="appBinding"
									contract="meinAppContract">
        </endpoint>
				<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex">
				</endpoint>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding  closeTimeout="00:10:00"
								 openTimeout="00:10:00"
								 sendTimeout="00:10:00"
								 maxReceivedMessageSize="2147483647"
								 maxBufferPoolSize="2147483647"
								 useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="2147483647"
												maxStringContentLength="2147483647"
												maxBytesPerRead="2147483647"
												maxDepth="2147483647"
												maxNameTableCharCount="2147483647" />
        </binding>
        <binding name="ExpBinding" 
								 closeTimeout="00:10:00"
								 openTimeout="00:10:00"
								 sendTimeout="00:10:00"
								 maxReceivedMessageSize="2147483647"
								 maxBufferPoolSize="2147483647"
								 useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="2147483647"
												maxStringContentLength="2147483647"
												maxBytesPerRead="2147483647"
												maxDepth="2147483647"
												maxNameTableCharCount="2147483647" />
        </binding>
				<binding name="appBinding" 
								 closeTimeout="00:10:00" 
								 openTimeout="00:10:00" 
								 sendTimeout="00:10:00"
								 maxReceivedMessageSize="2147483647"
								 maxBufferPoolSize="2147483647" 
								 useDefaultWebProxy="true"
								 messageEncoding="Mtom"
								 maxBufferSize="10485760">
					<readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" />
				</binding>
      </basicHttpBinding>
    </bindings>

So nun das Problem : Der Service "meinService" nimmt nicht die benamte Config sondern einfach immer die erste die er findet, egal ob ich nen Namen setze oder nicht.
Das heißt, mtom zB wird nicht aktiviert.

hat jmd eine Idee?

17.10.2014 - 17:46 Uhr

Hi,

Sowas habe ich befürchtet 😃
Danke für den Link

Grüße

17.10.2014 - 12:50 Uhr

Hallo zusammen,

folgendes ist gegeben :
Eine WSDL mit XSD wo zB Regex Pattern enthalten sind bei einigen Felder.
Ich generiere aus der WSDL und dem XSD per svcutil.exe einen Proxy.
Diesen stelle ich als Service bereit.

So wie ich das sehe muss ich dann das einkommende Model nochmal gegen die XSD validieren, ansonsten werden die patterns ja übergangen.

Gibt es da noch eine andere Methode ? Ich dachte da an einen Interceptor der vor dem Deserialisieren die Prüfung macht.

Grüße
Ahri

16.09.2014 - 08:45 Uhr

Hallo,

da du den MAC teilweise nur zum Debuggen brauchst, kannst du dir einen günstig in der Bucht schießen, ein 2011er Macbook Air reicht dafür aus

16.09.2014 - 07:57 Uhr

Hallo zusammen,

mitlerweile habe ich es nun gelöst, auch wenn ich der Meinung bin das schön was anderes ist 😦

Man liest einfach den XML Subtree aus :

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
        {
	        var headerIndex = request.Headers.FindHeader("AuthenticationHeader", "http://unserwww");
	        if (headerIndex >= 0)
	        {
				var headerReader = request.Headers.GetReaderAtHeader(headerIndex).ReadSubtree();
				var headerData = XElement.Load(headerReader);
		        var usernameElement = headerData.Element("Username");
		        var passwordElement = headerData.Element("Password");

		        if (usernameElement != null && passwordElement != null)
		        {
					if (this.authenticator.ValidateCredentials(usernameElement.Value, passwordElement.Value))
					{
						return request;
					}
		        }			
	        }

            throw new FaultException("Unknown Username or Incorrect Password");
        }
15.09.2014 - 11:08 Uhr

Hallo zusammen,

wir kriegen von Dienstleistern Soap Requests rein.
Für eine neue Schnitstelle nutzen wir nun WCF

hierfür wird eine Nachricht gesendet:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:app="http://unsererAPP" xmlns:unserns="http://unserwww">
   <soapenv:Header>
      <unserns:AuthenticationHeader>
         <unserns:Username>A</unserns:Username>
         <unserns:Password>B</unserns:Password>
      </unserns:AuthenticationHeader>
   </soapenv:Header>

Dazu gibt es einen MessageInsepctor :

        public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
        {
			var authenticationHeader = request.Headers.GetHeader<AuthenticationHeader>("AuthenticationHeader",
																					   "http://unserwww");

            if (this.authenticator.ValidateCredentials(authenticationHeader.Username, authenticationHeader.Password))
            {
                return request;
            }

            throw new FaultException("Unknown Username or Incorrect Password");
        }

Und der header :

	public class AuthenticationHeader
	{
		/// <summary>
		/// Gets or sets the Password
		/// </summary>
		[DataMember(Name = "Password")]
		public string Password { get; set; }

		/// <summary>
		/// Gets or sets the Username
		/// </summary>
		[DataMember(Name = "Username")]
		public string Username { get; set; }
	}

Der Header wird nur zum Teil ausgelesen : Das Object selber ist da, nur die beiden propertys sind NULL.
Ich kann mir nicht erklären warum.

Jmd ne Idee ?

Grüße

12.09.2014 - 08:03 Uhr

Hallo Herbivore,

das beispiel mit den deaktivieren deiner Controls finde ich ok, durch einen Modalen Dialog wird dir diese Arbeit aber abgenommen.

Ich sehe es so: Modale Dialoge benutzen Programme seit Äonen. Dieses Verhalten zu ändnern obliegt uns SW Entwicklern und Architekten. Ob es die Kunden dann annehmen ist eine andere Sache.

Ich sehe nicht die Frage wann Modale Dialoge Sinnvoll sind und ob, sondern wie man die Akzeptanz für andere "Mittel" fördert.

Ich zB kriege immer klare Vorgaben unserers Fachbereiches, darf zwar mitmischen bei Veränderungen der Oberfläche, solche Radikalen änderungen allerdings werden abgewatscht mit dem Spruch : "Wie selbst Windows/Linux machen das doch so"

Herbivore, hast du Software ohne Modale Dialoge im Einsatz und wie kommt das an ?

Grüße

09.09.2014 - 12:25 Uhr

Habe die Lösung nun gefunden :

Eine Klasse die IErrorHandler implementiert und dazu einen passenden Behavior

Grüße

09.09.2014 - 11:04 Uhr

Hallo zusammen,

ich biete einen WCF Service nach außen an.
Wenn ein falsches Model reingegeben wird, möchte ich eine eigene Fehlermeldung ausgeben.
Anstatt wird aber eine SerializationException geworfen.

Bisher habe ich im Netz nur gefunden "Nutze doch das Messagetracing"

Muss ich also wirklich einen eigenen Deserialisierer schreiben der dann die Meldung ausgibt oder gibt es einen anderen Weg ?

Grüße
Ahri

03.09.2014 - 16:05 Uhr

Probier doch mal dem Standardbinding einfach keinen Namen zu geben.
Wir hatten auch mal das Problem, dass er die Config nicht gezogen hat.

Grüße
Ahri

28.08.2014 - 09:11 Uhr

Wo siehst du ein ATTACK ? Ich sehe ein ACK ein acknowledge

31.07.2014 - 08:19 Uhr

Perfekt, danke !

30.07.2014 - 21:55 Uhr

Hallo zusammen,

ich muss nach etlichen Jahren mal wieder was in WPF machen 😉

Wir haben eine Art Storyboard, welches seine Konfiguration in einer XML speichert. Es gibt BaseAction mit einem Eingang und einem Ausgang und eine BaseDecision mit einem Eingang und zwei Ausgängen.

Soweit so schön. Ich möchte nun einen Editor dafür bauen und brauche mal etwas Input :

Meine Idee ist es , einen BasicNode davon zwei Ableitungen. Die BasicNode hat einen Connector. Die Action hat einen weiteren und die Decision zwei weitere.

Die Idee ist es nun, dass zB eine Action einen EingangsConnector und einen AusgangsConnector hat. Beide (Node und die Connectoren) haben X und Y Koordinaten. Ein User kann nun eine Node auf die Oberfläche ziehen und die Konnektoren miteinander verbinden. So weiß ich immer welches Control miteinander verbunden ist.
Die Items müssen nun so gezeichnet werden, dass die Konnektoren immer am Node an der richtigen Stelle bleiben (Denke mal mit Offset etc möglich)

Was brauche ich noch um die Nodes dragable zu machen ? ItemList ? Canvas ?
Kann mir da jmd mal einen Stoß in die richtige Richtung geben ?
Wie gehe ich da schlau vor ? Datatemplates für ein Grid ?

Wie schon angedeutet die Programmlogik ist nicht das Problem, eher XAML 😉

Danke und Grüße

07.07.2014 - 09:32 Uhr

Gut, jetzt vergleichen wir Äpfel mit Birnen, oder ist Dir Deine Lebenszeit nix wert?
Bei einem einzelnen Server hast Du Wartungsaufwand, Konfigurationsaufwand, keine Redundanz.
Willst Dich im Kern drum kümmern und Software entwickeln oder nebenher noch nen halber Admin sein?

Wenn ich meinen Stundenlohn betrachte und schaue, was ich in der Zeit machen kann, waehrend ich einen Server einrichten / konfigurieren muss, dann bin ich günstiger dran, wenn ich die Managed Variante nehm. Und ich muss mich nicht mit so nem Gefrickel an Konfigdateien rumschlagen.

Ach komm,

als ob das sooo viel Zeit kosten würde.
Ich habe für meinen Server gerade mal 30 Minuten gebraucht. Inkl einrichten Linux + nginx und Mono. Die Mär vom riesen Konfigaufwand und der Wartung besteht also immer noch.
Effektiv kümmere ich mich pro Monat 3 Min mit dem Server. Nur wegen dem aufspielen von Patches. Aber auch diese kann man automatisieren, wenn man zB eine Adminoberfläche nimmt.

07.07.2014 - 08:50 Uhr

Ein virtueller Linux Server mit unlimited Traffic etc kostet 6 Euro im Monat und du kannst dir ohne Probleme nginx und mono draufspielen 😉

24.06.2014 - 08:17 Uhr

Ich finde eure/deine Architektur Grundlegen falsch.
Man kann alle Daten Kapseln bzw die Zugriffe.

So haben wir zB nur einen Service der uns je nach übergebener Entität die Daten für eine gewisse Table zurückgibt

Und die Entität ist erstmal nur ein Interface , welches dann auf Serverseite dynamisch aufgelöst wird.

Noch eine Frage : Warum MÜSSEN unbedingt ALLE Tabellen übergeben werden ?

Bei einer Mehrschicht Architektur definierst du pro Schicht POCOs oder im DL halt DataEntitäten etc.
Du gibts in den WCF Services nur die Felder /Daten zurück die du wirklich brauchts und nicht stumpf alle.
Nach meinem Empfinden probierst du DatenEntitäten 1zu1 durch alle Schichten zu schleifen.

Überdenke doch bitte die Architektur, denn wenn du schon bis Serviceebene was neu machen kannst, kannst du sehr wohl die Architektur beeinflussen 😉

Grüße

16.05.2014 - 09:40 Uhr

Mittlerweile bin ich doch weiter : Es scheint, dass der Code Optimizer beim compilen alles Inline macht. Dadurch steht der StackFrame nicht zuer Verfügung.

[MethodImpl(MethodImplOptions.NoOptimization)]

Scheint erstmal zu wirken.

Edit für evtl. andere leute:

Lasst die Finger von solchen Optimierungen. Ein Code sollte nie vom StackeFrame abhängig sein.
Ich werde unsere Loggingkomponnente umbauen und mit strings arbeiten.

grüße

16.05.2014 - 09:25 Uhr

Das schlimme ist, der StackFrame steht zur Verfügung, es wird keine Exception geworfen, es wird nur was normales geloggt. Bisher hat es immer funktioniert, auch auf den Test und Produktionsservern, auf den Produktionsservern läuft es bisher
Es muss also einen bestimmten Grund haben

Und ja ich meine die CallerNameAttribute.
Das 4.5 dürfen wir im Bankenumfeld noch nicht nutzen 😉

16.05.2014 - 09:07 Uhr

Hallo zusammen,

wir habe eine Loggingkomponnente im Einsatz welche sich den Methodennamen und Klassennamen des aufrufers nimmt aus dem StackFrame

var method = new StackFrame(1).GetMethod();
		var classType = method.ReflectedType;

Wir nutzen diese in einem Webprojekt gehostet auf dem IIS
Seit neustem fliegen wir hier mit einer NULL Reference Exception raus.
Das schlimme ist, wir sehen ja dadurch keine Logeinträge und Lokal können wir das Problem nicht nachstellen.

Hat jmd eine Idee woran es liegen könnte ?

P.S. NET 4.5 mit den Attributen dürfen wir nicht nutzen

Grüße