Halt, ich muss zurück rudern! 😉
Ich hatte "zu früh" in die WindowsIdentity.Name Eigenschaft geschaut.
Wenn ich erst am Start der Service-Operation den Wert abrufe, dann passt auch alles mit der Impersonifizierung mittels
<serviceAuthorization impersonateCallerForAllOperations="true" />
Gruß,
wax
Ich habe mal weiter gesucht und die passende Identität in der aktuellen WindowsIdentity gefunden:
WindowsIdentity currentWinIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
Allerdings wird diese auch erst dann auf den Wert des aufrufenden Users gesetzt, nachdem ich explizit impersonifiziere:
using (WindowsImpersonationContext myContext = opContext.ServiceSecurityContext.WindowsIdentity.Impersonate()) {
}
Ich dachte ich müsste nicht mehr impersonifizieren, weil ich
<serviceAuthorization impersonateCallerForAllOperations="true" />
verwende.
Bringe ich hier etwas durcheinander?
Gruß,
wax
Hallo zusammen,
ich nutze zur Zeit den IIS 7.5 in Verbindung mit einem WCF-Webservice.
Ich möchte den Service per IIS hosten und der Zugriff soll über http oder net.tcp erfolgen.
Zum Testen habe ich mich erstmal auf das http-Binding beschränkt.
Authentifiziert soll ein Client durch Windows-Authentication werden, welche am IIS auch als Authentifizierungsmethode eingerichtet ist.
Den WCF-Service habe ich folgendermaßen konfiguriert:
<wsHttpBinding>
<binding name="myHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
Diese Binding-Config wird am wsHttp-Endpoint auch gesetzt.
<endpoint name="httpEndpoint" address="" binding="wsHttpBinding" contract="IMyContract" bindingConfiguration="myHttpBinding" />
Außerdem zwinge ich mittels
<serviceAuthorization impersonateCallerForAllOperations="true" />
zur Impersonifizierung.
Nachdem ein Domänen-Client nun eine Service-Operation aufgerufen hat, lese ich den entsprechenden User aus:
var identity = OperationContext.ServiceSecurityContext.WindowsIdentity;
Hier ist der Name des Users korrekt gesetzt.
Anschließend schaue ich mir den aktuellen Thread-Context an:
var currentIdentity = Thread.CurrentPrincipal.Identity;
Leider sind in dieser Identity keine Werte gesetzt, also auch kein Name.
Aufgrund von "impersonateCallerForAllOperations" ging ich davon aus, dass ich den aufrufenden User im aktuellen Thread-Kontext finden müsste.
Muss ich etwa per Hand impersonifizieren oder muss ich wohlmöglich im IIS auch den "ASP.NET-Identitätswechsel" aktivieren?
Gruß,
wax
Danke für eure Antworten!
Ich habe mich für eine Kombination aus T4-Templates und verlinkten Dateien entschieden.
Ich lasse die T4-Skripte in einem Pre-Build-Event laufen.
Mir ist allerdings aufgefallen, dass dieses Pre-Build-Event auch dann getriggert wird, wenn das beinhaltende Projekt laut Solution-Konfiguration gar nicht erzeugt werden soll.
Ich möchte nämlich, dass dieses Pre-Build-Event nur im Release-Build läuft.
Mache ich was falsch oder werden Build-Events auch dann ausgelöst, wenn das dazugehörige Projekt gar nicht "gebuildet" wird?
Gruß,
wax
edit: Hat sich wohl erledigt. Das Event wird anscheinend doch nicht gefeuert. Keine Ahnung was ich da gesehen hatte.
Hallo zusammen,
zur Zeit wird ein Softwareprojekt von mir mittels eigenem MSBuild-Skript erstellt.
Die VS-Solution enthält mehrere Projekte und alle Projekte verweisen auf eine gemeinsame AssemblyInfo.cs.
Das ganze funktioniert wie hier beschrieben: Shared Assembly Info
Somit habe ich den Änderungsaufwand beim inkrementieren einer Version schon mal auf ein Minimum reduziert.
Allerdings möchte ich auch diese Anpassung nun automatisieren.
Als Versionskontrollsystem setze ich TFS ein.
Ich habe im Netz bereits Möglichkeiten gesehen wie man es per T4-Template machen könnte.
Inklusive auschecken der AssemblyInfo.cs Datei vorher, ändern des Inhaltes und anschließendes wieder einchecken.
Das ganze schien "etwas hacky" zu sein.
Deswegen meine Frage, hat jemand Erfahrung mit diesem Szenario und was könnt ihr empfehlen bzw. wie macht ihr das?
Gruß,
wax
😭
Hi Coffeebean,
ich verwende die Version 5.2.1
Gruß,
wax
Guten Morgen,
ich nutze zur Dokumentation meiner WebAPI Swagger bzw. Swashbuckle.
Um Swashbuckle mitzuteilen welchen Response-Type eine meiner WebAPI-Controller Methoden zurückgibt, nutze ich das Attribut
[System.Web.Http.Description.ResponseType(typeof(MyType))]
Das funktioniert super. MyType wird inkl. aller geerbten Member Properties korrekt erkannt und dargestellt im Swagger-UI.
Wenn ich nun aber anstelle von MyType lieber das Interface IMyType angeben will, dann werden nur die direkten Member aus IMyType angezeigt. Alle Properties von geerbten Interfaces, werden ignoriert.
Weiß jemand ob das eine Config-Sache von Swashbuckle sein kann bzw. wie man Swashbuckle dazu bringt auch tiefer durch die Vererbungshierarchie bei Interfaces zu buddeln?
Gruß,
wax
Hallo zusammen,
ich schraube zur Zeit an Plug-In Erweiterungen für unsere WebAPI herum. Das Plug-In System funktioniert super. Jetzt fände ich es allerdings genial, wenn ich einen Plug-In Controller schreiben könnte und dieser seine Aktionsmethoden einfach in eine bereits existierende Route "reinhängen" könnte.
Ein Beispiel:
Route-Template des existierenden Controllers:
~/AlteRoute/{action}/{id}
Route-Template des Plug-In Controllers:
~/AlteRoute/{action}/{id}
Leider kommt er beim Aufruf einer Plug-In Methode nicht mehr bis zum Plug-In Controller, sondern die WebAPI sucht nur im alten Controller und findet dort natürlich keine passende MEthode.
Ist das irgendwie möglich?
Gruß,
wax
ps: Ich habe es nur Ansatzweise hinbekommen, indem ich das RouteAttribute direkt an der Plug-In Methode gesetzt habe. Aber das ist in unserem Kontext schlecht umsetzbar, weil die Routen einen konfigurierbaren Präfix-Anteil haben und ich diesen halt an der Stelle nicht hart kodieren kann/will.
Guten Tag,
ich habe in einem ASP.NET WebAPI Projekt zur Zeit einen Controller, der z.B. 2 Aktionen bereitstellt:
void Add(Item item);
void Add(Collection<Item> items);
Die Methoden werden vom Client aus mit JSON Daten aufgerufen.
Wenn ich die Methoden nun unterschiedlich benenne, dann bekommt JSON.NET den Aufruf wunderbar weitergeleitet an die korrekte Controller-Methode.
Ich möchte in der API aber gerne nur eine Methode nach Außen reichen, nämlich
void Add(Collection<Item> items);
Wenn der Client nun aber JSON übergibt, dass nur ein einziges Item abbildet, soll mein Server so schlau sein und dieses eine Item in eine Collection verpacken und das neue Paket wieder in die Pipeline werfen damit es an der Methode, die mit Collections umgehen kann, auch ankommt.
Also ich möchte mich quasi dazwischen schalten und wenn ich bemerke, dass nur ein Item übergeben wurde, dann möchte ich dieses in einer Collection einpacken und diese neue Collection weiter auf die Reise ins WebAPI-Land schicken.
Geht das und wenn ja, wo kann ich mich zwischen schalten?
MessageHandler, RouteDispatcher, CustomJsonConvert?
Gruß,
wax
Hallo,
die Situation sieht inzwischen folgendermaßen aus...
Client-Rechner in derselben Domäne wie der Server, können sich nur dann per "Windows-Authentifizierung" anmelden, wenn die ApplicationPool-Identität auf ein vordefiniertes Konto festgelegt wurde. Also z.B. ApplicationPoolIdentity oder NetworkService usw.
Sobald ich die Identität des AppPool's aber auf einen lokalen User der Server-Maschine stelle, wird jede Client-Anfrage wieder mit einem 401er Fehler quittiert.
Ich habe diesem lokalen User auch ausreichende NTFS-Rechte auf den Anwendungsordner gegeben.
Hat leider keine Besserung gebracht.
Hat noch jemand Ideen woran es liegen kann?
Gruß,
wax
Mit Standard meine ich die Http-Basic-Authentifizierung. Haben die im IIS schlecht übersetzt wie ich finde. Also der Browser (IE) ist so konfiguriert, dass er es kann. Klappt bei lokalen Seiten mit derselben Authentifizierung auch.
Edit: Ich habe das Wort Remote überlesen. Kann man die Credentials Weitergabe getrennt für lokal und remote konfigurieren?
Gruß,
wax
Guten Tag,
ich habe für eine WebAnwendung im IIS die Authentifizierung auf "Windows-Authentifizierung" gestellt und alle anderen Authentifizierungs-Arten deaktiviert.
Wenn ich anschließend auf der selben Maschine eine Seite der Anwendung aufrufe und mir die Identity des Users ausgeben lasse, dann passt auch alles.
Sprich, AuthenticationType = Negotiate und Name ist auch richtig gesetzt.
Falls ich dieselbe Seite aber nun von einer anderen Maschine aus aufrufe, dann erscheint im Browser der Zugangsdaten-Dialog für die Standard-Authentifizierung, welche aber gar nicht aktiviert ist!!!
Die Umgebung sieht folgendermaßen aus:
Beide Maschinen befinden sich in derselben Domäne im Intranet.
IIS-Version: 8.5
ASP.NET: 4.5
Hat jemand eine Idee was da schief laufen könnte?
Gruß,
wax
Hi Abt,
danke für deine Antwort!
Nun kommt noch ein weiterer Ansatz von dir und inzwischen habe ich mehr Wege nach Rom als ich Zeit habe zu laufen. 😉
Du hast nun ein eigenes AuthorizeAttribute erwähnt. Würdest du diese Variante den DelegatingHandlern vorziehen?
Wie würde es ablaufen zu sagen, dass AD-Auth ausgeführt werden soll?
Ich würde im IIS also die gewünschte Authentifizierung einstellen, damit der Client dazu aufgefordert wird den Header mitzuschicken oder muss das der Client in deinem Fall von sich aus initiativ machen?
Gruß,
wax
Hallo zusammen,
ich arbeite zur Zeit an einem ASP.NET - WebApi Projekt, dass per IIS bereitgestellt wird.
Bisher war im IIS die "anonyme Authentifizierung" zugelassen und die Anwendung hat mittels DelegatingHandler darauf aufmerksam gemacht, dass sie eine Http-Basis-Authentifizierung erwartet.
Die übergebene username:password - Information wurde analysiert und weiter verwendet.
Nun gibt es allerdings Anforderungen den Service auch mittels "Windows-Authentifizierung" erreichen zu können.
Mir stellt sich jetzt die Frage wie ich das am besten angehe.
Mir schweben da ein paar Möglichkeiten vor:
Soll ich die "anonyme Authentifizierung" im IIS eingestellt lassen und wieder mittels DelegatingHandler oder einem anderen Konstrukt den Client dazu auffordern sich mittels "Negotiate" anzumelden? Geht das überhaupt und wenn ja wie?
Soll ich eine zweite Website im IIS einrichten die nur per "Windows-Authentifizierung" erreichbar ist? Ich frage das, weil ich glaube, dass es in meinem Fall nicht möglich ist verschiedene Authentifizierungen im IIS für ein und dieselbe Website zu mischen.
Wichtig ist mir, dass ein Teil der Website (Swagger-Doku) ohne Anmeldung erreichbar sein soll.
Deswegen habe ich bisher auf "anonyme Authentifizierung" im IIS gesetzt.
Gruß,
wax
Zum Verständnis...
Du möchtest in deinem Beispiel die Mitte des schwarzen Kreises finden und dieser kann sich irgendwo auf dem weißen Hintergrund befinden?
Gruß,
wax
Hi Lalgeriano,
also das Buch von Carsten Seifert (Hummelwalker) kann ich nur empfehlen.
Ich habe es passend zur 4.x Version von Unity und die einzelnen Themengebiete sind sehr gut und verständlich beschrieben.
Ansonsten kann man ja noch erwähnen, dass du neben C# auch in JavaScript schreiben könntest. Falls dir das eher liegt.
Ich entwickle nur für mobile Geräte (Android, iOS, WP8) und hatte bisher die Beschränkung, dass ich auf dem .NET-Framework 2.0 arbeiten musste, damit es wirklich auf jeder dieser Plattformen lauffähig war.
Kann sein, dass sich das mit Unity 5 geändert hat oder ich generell falsche Settings benutzt habe.
Da lasse ich mich gerne belehren. 😉
Gruß,
wax
Ok hab schon was gefunden: Swashbuckle
und
asp-net-web-api-documentation-using-swagger
Jeweils in den letzen Abschnitten erfährt man alles Wissenswerte zu dem Thema.
MfG
wax
Hallo zusammen,
danke für die Antworten! Ich habe mir per Swashbuckle nun eine Swagger-Doku eingerichtet.
Wobei es noch das absolute Basic-Template ist.
Wie kann ich nun zusätzliche Beschreibungen für die gefundene Controller-Methoden definieren?
Ich hätte gedacht, dass Swashbuckle sich dazu die Methoden-Beschreibungen
<summary>description</summary>
zur Hand nimmt. Anscheinend ist dem nicht so?!
Wie muss ich nun vorgehen?
Auf http://editor.swagger.io/#/ werden alle Infos als YAML niedergeschrieben und in einem anderen Tutorial habe ich gesehen wie jemand "IncludeXmlComments" aufruft.
Wisst ihr da genaueres welcher Weg zu bevorzugen ist, bzw. wie man das nun anstellt?
MfG
wax
Guten Morgen,
ich stehe nun vor einer relativ ausgereiften WebApi und muss nun den Usern irgendwie nahe bringen, wie welche Methode aufzurufen ist, was sie als Ergebnis erwarten dürfen usw..
Ich bin gerade über diesen Artikel gestolpert:
Creating Help Pages for ASP.NET Web API
Benutzt ihr auch diese Technik oder hat sich für euch ein anderer Ablauf als "besser" herausgestellt?
MfG
wax
Ich habe da noch ein damit zusammenhängendes Problem...
Zur Zeit verwende ich WiX-Heat.exe zum Sammeln der zu installierenden Komponenten.
Darunter ist auch die besagte Web.config.
Damit ich diese Web.config-Datei nun per "util:XmlFile" ändern konnte, musste ich die Datei zuerst im Build-Skript entfernen, so dass Heat sie nicht eingesammelt hat.
Es muss doch eine Möglichkeit geben die Datei per Heat.exe finden/installieren zu lassen und trotzdem mit WiX-Boardmitteln die XML-Datei im Anschluss zu aktualisieren!?
"util:XmlFile" ist selbst Child eines "Component"-Elementes und somit möchte WiX die Datei nochmals zur Installation hinzufügen. Das will ich aber garnicht.
Wie macht ihr soetwas?
MfG
wax
Hi Abt,
Danke für deine Antwort.
Es wäre noch wichtig gewesen zu erwähnen, dass das Component-Element Child eines DirectoryRef-Elementes ist.
Hier ist die funktionierende Variante. Ich habe einfach das "@value" im XPath weggelassen und das "Name"-Attribut mit diesem Wert gesetzt:
<DirectoryRef Id="WEBSITE">
<!-- Component handling the web.config -->
<Component Id="WebConfigCmp" Guid="{MyGUID}">
<File Id="Web.config" Name="Web.config" Vital="yes" KeyPath="yes" Source="$(var.publishDir)\Web.config" />
<util:XmlFile Id="WebConfigChange"
Action="setValue"
Permanent="yes"
File="[#Web.config]"
ElementPath="//configuration/appSettings/add[\[]@key='MyKey'[\]]"
Name="value"
Value="[MY_VALUE]" />
</Component>
</DirectoryRef>
MfG
wax
Hallo zusammen,
ich ändere zur Zeit mittels
<Component Id="MyCmp" Guid="MyGUID">
<File Id="Web.config" Name="Web.config" Vital="yes" KeyPath="yes" Source="$(var.publishDir)\Web.config" />
<util:XmlFile Id="WebConfigChange"
Action="setValue"
Permanent="yes"
File="[#Web.config]"
ElementPath="/configuration/appSettings/add[\[]@key='MyKey'[\]]/@value"
Value="[MY_VALUE]" />
</Component>
Das Problem ist nun, dass in der Web.config nachher das AppSettings-Element folgendermaßen aussieht:
<add key="MyKey" value="[MY_VALUE]" [MY_VALUE]="[MY_VALUE]">[MY_VALUE]</add>
Ich wollte eigentlich nur das Attribut "value" ändern und nicht noch eines hinzufügen und dem Element an sich auch keinen Inhalt verpassen.
Was mache ich falsch?
Jemand ´ne Ahnung?
MfG
wax
Ich hab's jetzt mittels CallContext.LogicalGetData() gelöst.
Implicit Async Context ("AsyncLocal") mal mehr Infos zu dem Thema.
Also bisher sieht alles gut aus, es beunruhigt mich nur etwas, dass der Code aus dem Remoting-Namespace kommt.
MfG,
wax
Hi Taipi88,
ich benötige pro Thread eigene Werte, deswegen ThreadLocal<T>.
Ich sehe da gerade keine Singleton-Situation.
Oder habe ich nur Tomaten auf den Augen?
MfG,
wax
Hi zusammen,
ich habe zur Zeit das Problem, dass meine Anwendung ThreadLocal-Werte vorhält und der Anwendungscode hin und wieder auf diese Werte zugreift. Das funktioniert auch alles wunderbar, solange halt kein neuer Thread erstellt wird.
Nur leider lässt sich das nicht immer vermeiden und dann habe ich ein Problem!
Zur Zeit biete ich für solche Zwecke einen "TaskHelper" an, der sich darum kümmert die Werte des alten Threads in den neuen Thread zu kopieren, bevor der eigentliche Task ausgeführt wird.
Leider ist das sehr fehleranfällig, da nicht jeder diesen Code benutzt oder aber mit async/await arbeitet. Da kommt es ja auch schon mal vor, dass ein anderer Thread verwendet wird und ruck zuck bin ich wieder bei meinem Problem.
Fragen:
Gruß,
wax
PushStreamContent funktioniert gut.
Danke für die Hilfe!
MfG
wax
In klassischem ASP.NET konnte man einfach per HttpResponse.Flush() Daten zum Client schicken.
Ist das mit der WebApi auch noch möglich oder muss ich den Weg über HTTP-Header wie "Content-Range" gehen?
Gruß,
wax
Moin zusammen,
@Sir Rufo: Ich könnte die Daten aufteilen. Es handelt sich um geschlossene Dokumente, Bilder etc.
@ malignate: Genau so mache ich es zur Zeit (denke ich zumindest). Hier mal meine Implementierung:
[HttpGet]
public HttpResponseMessage Download([FromUri]Parameter.HttpGetDownloadParameter parameter)
{
string name = String.Empty;
long size = 0;
var response = new HttpResponseMessage();
// stream anfordern
Stream fileStream = binaryController.Download(parameter, out name, out size);
// http-response erstellen
response.Content = new StreamContent(fileStream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = name;
response.Content.Headers.ContentLength = size;
response.StatusCode = HttpStatusCode.OK;
return response;
}
@malignate: Ich werde mir deinen Link jetzt mal genauer ansehen. Das sieht ja vielversprechend aus.
Gruß,
wax
Hallo zusammen,
ich habe da mal eine Frage bzgl. des Downloads von "großen" Dateien (> 50MB) mittels ASP.NET WebApi.
Also ich habe bereits eine funktionierende Implementierung, doch leider haben die mobilen Clients das Problem, dass bis zum endgültigen Download kein Response verfügbar ist.
Und wenn der Client-Code nun mit einem Time-out arbeitet, dann rennt er da auch meistens rein.
Also frage ich mich, wie ihr so etwas löst?
Kümmert ihr euch selbst darum große Dateien in "häppchen" zu zerhacken und diese mit eigener "Distributions-Logik" zum Client zu schaffen, oder baut ihr komplett auf die von ASP.NET angebotenen auf?
Vielleicht liegt es ja auch nur am Client-Code und der Server ist überhaupt nicht das Problem.
Gruß,
wax
Hi malignate,
danke für deine Antwort.
Es geht im Endeffekt darum, dass Partner eigene Komponenten entwickeln können, ohne dass sie an den (Main-)Source-Code ran müssen.
Ich habe inzwischen an sehr vielen Stellen im Netz oder in Fachliteratur immer wieder dieselben Beispiele gefunden, wie man Controller aus externen Assemblies einbinden kann/soll.
Leider funktioniert das bei mir noch nicht.
Gruß,
Markus
Hi Abt,
danke für deine Antwort.
Wo siehst du die Vor-/Nachteile meiner und der von dir genannten Varianten?
Ich würde in der aktuellen Implementierung noch prüfen, dass die PlugIn-Controller eine bestimmte Basisklasse erweitern.
Gruß,
wax
Hallo zusammen,
ich versuche zur Zeit unsere WebApi Schnittstelle etwas offener zu gestalten und die Bereitstellung von Controller-PlugIns zu ermöglichen.
Also WebApi-Controller werden als .dll in einem bestimmten Verzeichnis abgelegt und beim Start der Anwendung geladen.
Dabei habe ich mich an diese Taktik gehalten: asp-net-web-api-plugin-architecture
Leider funktioniert das Ganze noch nicht so recht. Heißt, eine auf die aktuelle URL passende Controller-Methode aus dem PlugIn-Controller wird nicht aufgerufen.
Die Route wurde gesetzt.
Hat jemand damit schon einmal Erfahrung gemacht und weiß woran es liegen könnte?
Gruß,
wax
Hallo,
es hat sich heraus gestellt, dass ein eigener "FormUrlEncodedMediaTypeFormatter" eingesetzt wird und in diesem wurde
public override bool CanReadType(Type type)
überschrieben.
Für den Typen DataX wurde "false" zurück gegeben. Von daher verstehe ich den Serverseitigen-Aufruf mit "null" Parameter.
Was ich nicht verstehe ist die Tatsache, dass der gleich Code auf meinem lokalen System funktioniert. 🤔
MfG
wax
Hi,
ich schicke die gleiche Anfrage per Postman einmal an meinen lokalen IIS und einmal an das Testsystem. Header sind richtig gesetzt.
MfG
wax
Hallo zusammen,
ich arbeite zur Zeit an einer ASP.NET-Web.API und habe das Projekt vom Entwicklungsrechner nun auf ein anderes Testsystem gezogen.
Mein Problem ist nun, dass auf meiner Dev-Maschine alles wunderbar funktioniert hat und auf dem Testsystem werden die (per JSON) übergebenen Parameter nicht mehr korrekt vom Server empfangen.
Hier mal die Methodensignatur:
[HttpPost]
public HttpResponseMessage MethodeX([FromBody]DataX xData)
Auf meinem Entwicklungsrechner ist xData korrekt gesetzt und auf dem Testsystem ist es immer "null". Es wird kein eigener JSON-MediatypeFormatter oder dergleichen verwendet.
Habt ihre eine Idee, woran das liegen kann?
MfG
wax
Hi Abt,
danke schon mal für die Wegweisung!
Ich finde es auch alles andere als schön, doch zur Zeit wäre es die Lösung, die nicht alles auseinander reißen würde. Es gibt halt schon Clients die damit arbeiten.
MfG
wax
Hi,
sorry wegen dem Titel, mir fällt einfach nichts besseres ein zur Zeit.
Ich habe eine ASP.NET Web.Api-Anwendung und alle Controller-Aktionen haben Methodenparameter, die von derselben Basis abgeleitet wurden.
Ich schalte mich an der ApiController.Initialize() - Stelle "dazwischen" und möchte nun zu den original Daten, die an die Controller-Aktion weitergereicht werden würden, noch etwas hinzufügen.
Also quasi:
Request.Content auslesen...... Daten zum Content hinzufügen...... erweiterten Content wieder setzen
Meine Frage dazu lautet, geht das überhaupt bzw. geht es vielleicht auch einfacher?
MfG
wax
Hallo zusammen,
ich muss seit langem mal wieder mit der WCF arbeiten und habe soeben auf verschiedenen Seiten gelesen, dass man Interfaces nicht per OprationContract veröffentlichen kann.
Beispiel:
[OperationContract]
[ServiceKnownType(typeof(SearchParameters))]
[ServiceKnownType(typeof(SearchCondition))]
[ServiceKnownType(typeof(SortCondition))]
ISearchResult Search(ISearchParameters parameters);
Dabei implementieren SearchParameters, SearchCondition und SortCondition das Interface ISearchParameters.
Wenn ich mir nun auf dem Client einen Proxy per WSDL erstellen lasse, dann sieht die Signatur für den Client so aus
object Search(object parameters);
Hat sich im Laufe der Zeit vielleicht etwas geändert bzgl. der Unterstützung von Interfaces in DataContract's oder muss ich auf Basisklassen anstelle von Interfaces setzen?
MfG
wax
Hi.
Falls du dich bei git nicht mit der Kommandozeile rumschlagen willst (was ich aber jedem empfehlen würde), dann kannst du auch git extensions benutzen. Es handelt sich um eine sehr gute grafische Oberfläche und die Visual Studio Integration ist gleich mit dabei.
MfG
wax
Hi FZelle.
Ob ich mich per Management Studio mmit UserID und Passwort anmelden kann, ist also völlig unabhängig davon?
MfG
wax
verwendetes Datenbanksystem: <SQL-Server 2008R2>
Hallo zusammen,
ich habe einen Windows Service geschrieben, der eine Verbindung zum SQL-Server 2008R2 benötigt.
Lokal auf meinem Entwicklungsrechner funktioniert das Ganze auch ohne Probleme.
Der Service läuft als <Lokales System>.
Nun habe ich versucht den Service auf unserer anderen Entwicklungsmaschine zu installieren und dort bekomme ich im EventLog ständig das hier gesagt:
Fehlermeldung:
Login failed for user 'myUser'. Reason: Failed to open the explicitly specified database. [CLIENT: <local machine>]
Ich bin mir allerdings sicher, dass die verwendeten Zugangsdaten für die Datenbank im ConnectionString richtig gesetzt sind.
Mit denselben Infos kann ich mich auf der Maschine z.B. per Management Studio bei der Datenbank anmelden.
Ich stehe leider total auf dem Schlauch. Das einzige was mir dazu einfällt ist, dass es am verwendeten Benutzerkonto liegen kann, in dem der Service läuft.
Habt ihr vielleicht noch eine andere Idee?
Leider kann ich auf der Maschine nicht "remote debuggen".
MfG
wax
Hi.
Also der ReSharper erkennt solche Konstrukte in der Regel und gibt einen "Recursive Call"-Hint.
Wundert mich...
MfG
wax
Hallo zusammen!
Unser Team wurde damit beauftragt eine in die Jahre gekommene Flash Anwendung neu zu implementieren. Da es sich bei dieser Anwendung um ein Produkt aus der Druckindustrie handelt, ist es extrem wichtig, dass die erstellten Grafiken/Fonts auf jedem System (Browser) nahezu identisch sind. Sprich, Pixel genaue Layouts und überall dieselben Zeilenumbrüche usw... Das wurde mit der Flash Anwendung wohl gut erreicht.
Auf dem ersten Blick hat sich SVG als sehr nützlich und gut zu handhaben präsentiert. Jetzt stellt sich uns aber die Frage ob es mit Techniken wie SVG in Kombination mit CSS überhaupt möglich ist die oben genannten Ansprüche zu erfüllen?
Muss man vielleicht doch alles selbst zeichnen mittels HTML5-Canvas?
Und wie sieht es mit der Cross-Browser Fähigkeit aus? Präsentieren sich die erzeugten Canvas/Bitmaps auf verschiedenen System/Browsern gleich?
Ich bin mir sicher, dass es hier genügend Leute im Forum mit Erfahrung in diesen Bereichen gibt.
MfG
wax
Für alle die dasselbe Problem haben, hier ein Link (Re: WiX-users: How to create web app/service on IIS 7 with WiX 3.0) der mir weitergeholfen hat.
Hallo zusammen,
ich benutze für unser Setup WiX inkl. der IIS-Extensions von WiX. Über die IIS-Extensions erzeuge ich eine Website im IIS und starte diese auch automatisch. Nun habe ich eine Custom-Action, die unbedingt nach dem Start der Website ausgeführt werden muss.
Weiß jemand wie ich das zeitlich planen kann?
Wie man generell den zeitlichen Ablauf von Aktionen planen kann ist mir bekannt. Mir fehlt die passende WiX-IIS-Standardaktion für dieses Element:
<iis:WebSite Id='Foo' Description='Bar' Directory='wwwroot' ConfigureIfExists='yes' StartOnInstall='yes' AutoStart='yes' >
Kennt sich da jemand mit aus?
MfG
wax
Was ich ganz vergessen hatte zu erwähnen: Wenn ich die Seite im Studio (Cassini) hosten lassen, dann klappt alles und ich kann das NAS benutzen.
Mit welcher Berechtigungsstufe läuft Cassini denn bitte? 😃
MfG
wax
Wenn du schreibst
Ich glaube aber, dass der IIS die Berechtigung braucht um in das NAS zu schreiben.
meinst du dann den Anwendungspool der für die Webanwendung verwendet wird?
Für die Anwendung wird eine anonyme Authentifizierung genutzt mit bestimmten User "IUSR". Der verwendete Anwendungspool benutzt die Identität "ApplicationPoolIdentity".
Müsste nun der Anwendungspool mit einer anderen Identität laufen? Zum Beispiel ein User Account, der auch als User Account auf dem NAS angelegt wurde?
MfG
wax
Hallo zusammen,
der Umgang mit dem IIS ist mir relativ neu und nun habe ich die Anforderung bekommen ein paar Daten einer ASP.NET Webanwendung die per IIS gehostet wird, auf ein NAS zu legen. Also es sind Daten die vom User hochgeladen werden und es wird gewünscht diese Daten nicht auf demselben Rechner wo auch der IIS läuft zu speichern, sondern auf einem NAS.
Ich habe daraufhin mal den standard lokalen Pfad in einen NAS-UNC Pfad geändert. Allerdings haut mir die Anwendung jetzt sowas hier um die Ohren:> Fehlermeldung:
System.IO.DirectoryNotFoundException: Could not find a part of the path 'NAS-UNC Pfad'.
Der Pfad existiert!
Ich frage mich nun an welchem Berechtigungsproblem es liegt. Fehlt der Web-Anwendung ein Recht auf dem NAS oder muss der Anwendungspool ein Recht auf dem NAS bekommen?
MfG
wax
Hallo zusammen,
ich würde gerne UnitTests für Methoden schreiben, die auf Page.IsPostBack prüfen. Für eine bessere Code-Coverage wäre es super wenn ich beide Fälle durchlaufen kann. Leider habe ich noch keinen Weg gefunden um per Code die Page.IsPostBack eigenschaft zu verändern. Ich bin schon mittels Mono.Reflection drauf los gegangen. Hat alles nichts gebracht. Hat jemand hier vielleicht eine Idee wie man soetwas testen kann?
MfG
wax