Dieses Problem verdirbt mir echt die ganze Woche.
Ich habe eine Docker Umgebung via Docker-Compose indem ein Container nach außen kommuniziert und den Port 6652 exposed. Darin läuft eine .net Core 3.1 Anwendung mit aktivierten Websockets und SignalR.
Rufe ich https://localhost:6652/ auf und gehe auf die Seite auf der SignalR verwendet wird (Eine Kommentar funktion die die neuen Kommentare in Echtzeit laden soll), funktioniert alles reibungslos.
Daher hab ich vermutet, das Problem muss am ReverseProxy mit ARR3 liegen und habe kurzerhand eine Subdomain in der Hosts Datei eingetragen um das lokal testen zu können.
Gehe ich nun auf die gleiche Seite aber über den Reverse Proxy (IIS10) landet der Handsake im Timeout:
[2022-01-13T18:29:07.232Z] Information: Normalizing '/sockR/hub' to 'https://devlocal.example.com/sockR/hub'.
Utils.js:151 [2022-01-13T18:29:07.233Z] Debug: Starting HubConnection.
Utils.js:151 [2022-01-13T18:29:07.233Z] Debug: Starting connection with transfer format 'Text'.
Utils.js:147 [2022-01-13T18:29:07.342Z] Information: WebSocket connected to wss://devlocal.example.com/sockR/hub.
Utils.js:151 [2022-01-13T18:29:07.342Z] Debug: The HttpConnection connected successfully.
Utils.js:151 [2022-01-13T18:29:07.342Z] Debug: Sending handshake request.
Utils.js:147 [2022-01-13T18:29:07.342Z] Information: Using HubProtocol 'json'.
... 3 Minuten später (solange geht der Timeout)
ERROR Error: Uncaught (in promise): Error: Server timeout elapsed without receiving a message from the server. Error: Server timeout elapsed without receiving a message from the server.
Natürlich habe ich vorher gegooglet und gesehen, dass man zum einen im ARR das Responerbuffering auf 1 setzen soll die Einstellungen hab ich auch so übernommen (Siehe Anhang)
Dann natürlich auch sollte eine WS/WSS Rewrite Rule vorhanden sein. Auch dies habe ich übernommen:
Das Failed Request Trace Log ist leer, also scheint der Handshake garnicht erst durchzukommen.
Cors erlaubt alle origins fürs Erste.
EDIT:
Websockets Feature ist installiert.
Verwende IIS10 + Docker + ARR3 auf Windows 11.
Meine Users Entity hat beinhaltet eine TwitchProfile Entity.
Wenn ich die Entity wie folgt hinzufüge (nach erfolgter Authentification) wird die Entity wie gewollt im Profil geladen.
TwitchProfile TwitchAccount = new DB.Domain.Entities.TwitchProfile()
{
User = this.UserSession.User,
ChannelName = twitchChannel.name,
ChannelUrl = new Uri(twitchChannel.url),
ChatUrl = new Uri("http://www.twitch.tv/"+ twitchChannel.name +"/chat"),
OAuthToken = authorizeResponse.access_token,
ProfileUrl = new Uri("https://www.twitch.tv/"+twitchUser.name+"/profile"),
Scopes = String.Join(" ", authorizeResponse.scope),
StreamName = twitchChannel.status,
StreamUrl = new Uri("http://player.twitch.tv/?channel="+ twitchChannel.name),
TwitchID = twitchUser._id,
TwitchName = twitchUser.name,
IsLive = isOnline,
PreviewImage = _previewImage,
Game = g,
EmbedMode = DB.Domain.Enums.TwitchProfileSettings.TwitchProfileEmbedModeEnum.embed,
ShowChat = true
};
var u = this._service.GetById(this.UserSession.User.Id);
if(u.TwitchAccount == null)
this._twitchService.Create(TwitchAccount);
Nun hat der User die Möglichkeit seinen Twichaccount natürlich auch wieder vom Profil zu entfernen. Löschen tue ich diesen wie folgt:
var u = this.UserSession.User;
if (u.TwitchAccount != null)
{
var p = u.TwitchAccount;
this._twitchService.Delete(p.Id);
}
return null;
Klappt alles wie gewollt. Profil entfernt. Jedoch führe ich es erneut aus und Füge es wie oben hinzu, wird der Datensatz zwar in die Tabelle TwitchProfile geschrieben mit richtigen Foreign Key, aber die Users Entity in Nhibernate sagt trotzdem Users.TwitchAccount == null.
Komischerweise klappt es in den Unit Tests. Ich benutzt MVC5 und mit einer UnitOfWork die beim start einer Action die Transaction beginnt und beim Ende diese Commitet und die Session schließt.
Der einzige Unterschied zwischen dem UnitTest und dem Controller Aufruf ist, dass im UnitTest die Session nicht geschlossen wird sondern die Transaction zwischen den einzelnen Schritten Comitted wird.
Auch wenn ich die Tabelle händisch leere wird die Entity nicht geladen wenn ich sie hinzufüge.
Lösche ich die Tabelle jedoch wird die Entity nach Hinzufügen wieder angezeigt und nach dem Löschen des Eintrags erfolgt wieder das gleiche Resultat.
hat leider nix gebracht. Er sucht weiterhin die Sachen in "ASP.content_create"
Die klasse gibt es nicht mal bei mir und ich finde auch nirgens einen Verweis darauf.
hier meine web.config :
<?xml version="1.0"?>
<!--
Hinweis: Alternativ zur manuellen Bearbeitung dieser Datei
können Sie auch mit dem Webverwaltungstool die Einstellungen
für Ihre Anwendung konfigurieren. Verwenden Sie die Option
"Website->ASP.NET-Konfiguration" in Visual Studio. Eine
vollständige Liste aller Einstellungen und Kommentare befindet
sich in "machine.config.comments", im Allgemeinen unter "\Windows\Microsoft.Net\Framework\v2.x\Config".
-->
<configuration>
<appSettings>
<add key="todayexportet15" value="0"/>
<add key="todayexportet23" value="0"/>
<add key="lastexport" value="00.00.0000"/>
<!--the resolution break-points to use (screen widths, in pixels)-->
<add key="AdaptiveImages.ResolutionBreakpoints" value="1382, 992, 768, 480"/>
<!--where to store the generated re-sized images. This folder must be writable-->
<add key="AdaptiveImages.CachePath" value="ai-cache"/>
<!--the quality of any generated JPGs on a scale of 0 to 100-->
<add key="AdaptiveImages.JpegQuality" value="80"/>
<!--check that the responsive image isn't stale (ensures updated source images are re-cached)-->
<add key="AdaptiveImages.WatchCache" value="true"/>
<!--How long the BROWSER cache should last in seconds. (604800 - 7 days by default)-->
<add key="AdaptiveImages.BrowserCache" value="604800"/>
<!-- If there's no cookie false sends the largest var resolutions version (TRUE sends smallest)-->
<add key="AdaptiveImages.MobileFirst" value="true"/>
<!--the name of the cookie containing the resolution value-->
<add key="AdaptiveImages.CookieName" value="resolution"/>
<add key="SteamApiKey" value="..."/>
<add key="FBAppID" value="..."/>
<add key="RouteDebugger:Enabled" value="false"/>
</appSettings>
<connectionStrings>
<add connectionString="..." providerName="System.Data.SqlClient" name="con"/>
</connectionStrings>
<system.net>
<connectionManagement>
<add address="*" maxconnection="1000"/>
</connectionManagement>
</system.net>
<!--
Eine Beschreibung der Änderungen von 'web.config' finden Sie unter 'http://go.microsoft.com/fwlink/?LinkId=235367'.
Die folgenden Attribute können für das <httpRuntime>-Tag festgelegt werden.
<system.Web>
<httpRuntime targetFramework="4.5" />
</system.Web>
-->
<system.web>
<httpRuntime executionTimeout="11800" maxRequestLength="1048576" useFullyQualifiedRedirectUrl="false" requestValidationMode="2.0"/>
<!--
<customErrors defaultRedirect="InternalError.htm"
mode="RemoteOnly">
<error statusCode="500"
redirect="InternalError.htm"/>
<error statusCode="404"
redirect="error.aspx?error=404"/>
</customErrors>
-->
<!--
Legen Sie beim Kompilieren debug="true" fest, um
Debugsymbole in die kompilierte Seite einzufügen.
Da dies die Leistung beeinträchtigt, sollte der
Wert nur beim Entwickeln auf "True" gesetzt werden.
-->
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<!--
Der Abschnitt <authentication> ermöglicht die Konfiguration
des Sicherheitsauthentifizierungsmodus, mit dem
ASP.NET eingehende Benutzer identifiziert.
-->
<authentication mode="Windows"/>
<!--
Der Abschnitt <customErrors> ermöglicht die Konfiguration
der Vorgehensweise bei unbehandelten Fehlern während
der Anforderungsausführung. Insbesondere können
Entwickler HTML-Fehlerseiten konfigurieren, die anstelle
einer Fehlerstapelüberwachung angezeigt werden.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="error.aspx?error=405" />
<error statusCode="404" redirect="error.aspx?error=404" />
</customErrors>
-->
<!--
-->
<customErrors mode="Off" defaultRedirect="error.aspx?error=500">
<error statusCode="404" redirect="error.aspx?error=404"/>
<error statusCode="403" redirect="error.aspx?error=403"/>
</customErrors>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
<controls>
<add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit"/>
</controls>
<namespaces>
<add namespace="NetworkFreaks_DE"/>
<add namespace="NetworkFreaks_DE.ACP"/>
<add namespace="NetworkFreaks_DE.Controls"/>
<add namespace="NetworkFreaks_DE.Controls.admin"/>
</namespaces>
</pages>
</system.web>
<!--
Der system.webServer-Abschnitt ist zum Ausführen von ASP.NET AJAX unter
Internetinformationsdienste 7.0 erforderlich. Für frühere Versionen von
IIS ist er nicht erforderlich.
-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="AdaptiveImageHandlerGif" path="*.gif" verb="GET" type="AdaptiveImages.AdaptiveImageHandler"/>
<add name="AdaptiveImageHandlerJpg" path="*.jpg" verb="GET" type="AdaptiveImages.AdaptiveImageHandler"/>
<add name="AdaptiveImageHandlerPng" path="*.png" verb="GET" type="AdaptiveImages.AdaptiveImageHandler"/>
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-1.4.9.0" newVersion="1.4.9.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
*EDIT*
Komischer Weise funktioniert es aber in Seiten ohne Master Page doch in solchen Fällen hier nicht:
Ich hab schon google probiert und kam auch durch stackoverflow auf keine Lösung für mein Problem.
Ich hab ein Webforms Projekt. Mit einem Unterordner "ACP" fürs Backend. Dort liegt die ASPX Seite "Content.Create.aspx" mit Codebehind Datei.
Meine Erstellten Controlls liegen fürs Backend in "~/Controls/admin/"
Weder die String-Variable "EntryType", welche in der Codebehinddatei liegt, noch meine Controls werden erkannt. Somit zeigt mit die IDE alles als nicht definiert an.
Komisch ist auch dass die Fehlermeldung wie folgt ist siehe Angang, auf einen ganz anderen Namespace zeigt, denn der der Codebhind datei ist "NetworkFreaks.ACP"
Kann die Projektdatei beim einchecken / auschecken von PC zu Notbook via GIT kaputt gegangen sein? Denn auf dem NB hab ich das Problem auch. Ebenfalls 2013er Express Version.
BTW: Deploy, Builden und ausführen geht reibungslos, somit denke ich dass es ein Problem in VS sein muss.
Ich möchte hier einmal kurz und bündig mein Open Source Projekt vorstellen (Github: https://github.com/nfMalde/Ren.CMS.NET) und suche gleichzeitig Helfer/Mitentwickler.
Vorher MVC2/3 habe ich nach rund 2 Jahren Entwicklung das Projekt ständig erweitert und auf MVC4 kovertiert (zu ca 90%, mehr zurzeit leider durch meine Arbeit und andere Sachen die dazwischen kamen nicht möglich da dies viele Änderungen in den Klassen mit sich führen würde.)
Zugegeben es ist erst seit ca einem halben Jahr Open Source, da ich es vorher nur für mich privat genutzt habe, um mir diverse Sachen anzueignen, die ich für die Ausbildung brauchte. Kurz nach der Ausbildung habe ich mich dennoch dazu entschlossen es zu veröffentlichen und es auf Github verfügbar gemacht.
Wie gesagt, da es vorher nur ein Lernprojekt war, sieht man an manchen Stellen noch "Spaghetti Code", ich arbeite jedoch daran das zu "Entwirren".
Das CMS trägt den Namen "Ren.CMS.NET" und unterstützt bereits folgende Features:
- Videokonvertierung
- Thumbnailgenerierung
- Rechteverwaltung (Bisher nur auf Datenbank Ebene)
- Usersettings
- Benutzerverwaltung
- Inhaltsverwaltung
- Kategorieverwaltung.
- Filemanagement mit Wasserzeichen oder Ohne je nach Einstellung
- Lokalisierung
- VideoJS implementierung
- Galerie
Es ist Modular aufgebaut, da ich wollte, dass sich jeder Nutzer seine Module selbst bauen kann, und wie man es bei anderen Erweiterungen kennt auch dessen Lizenz dann selbst bestimmen darf. Im Repository werden jedoch keinerlei Module landen die nicht von mir oder den vllt Mitentwicklern stammen und dessen Source Code einsehbar ist (Sprich nur es kommen nur Module die fest zum Kern des CMS gehören).
Später soll jedes Modul übers Backend installierbar sein. Und dem Admin der es installiert VOR der Installation Auskunft darüber geben welche Assemblys und Namespaces es verwendet und worauf das Modul zugreift.
Sowie eine Möglichkeit einzelne Module ganz zu deaktivieren (auch deren komplette Ausführung), jedoch steht das weit hinten in den TODOs.
Auf dem TODO stehen jede Menge Features / Fixes / Improvements, und wer in die Issues bei Github schaut, sieht schnell ich den Bereich dort dafür verwendet keine Idee verloren gehen zu lassen.
Es ist bereits ein Deployserver vorhanden der den aktuellen Stand auf die Demoseite spielt, jedoch da dieser selbst geschrieben ist gab es ein zwei Probleme, daher ist die Seite noch nicht aufrufbar.
Sollte es noch fragen geben werde ich die gerne beantworten :-)
Ich bekomme merkwürdiger Weise einen Fehler in meinem OpenSource CMS.
Undzwar möchte ich einen AjaxRequest machen und per JSON dann ganz normal success=true oder false und eine message zurückgeben.
Vorher habe ich immer in Plaintext "Inhalt erfolgreich erstellt" ausgegeben und es war ein normales ActionResult.
Merkwürdigweise ist das das einzige Form, welches mir diesen Fehler zurückgibt. Und dies auch nicht mal im debugger selber. Sondern es scheint direkt vom DevServer zu kommen.
Breakpoints sagen mir dass die Action korrekt durchgelaufen wird.
Ich dachte eventuell liegt es an meinem PC...daher habe ich das Repository auf meinem Notebook erneut gecloned und ach da der gleiche Fehler:
Fehler
Beim Serialisieren eines Objekts vom Typ "System.Globalization.CultureInfo" wurde ein Zirkelverweis erkannt.
public class nContentPostModel
{
#region Properties
/// <summary>
/// Returns the Category object
/// </summary>
///
[Required]
public string CategoryID
{
get;
set;
}
/// <summary>
/// Returns the Content Type of the Content
/// </summary>
///
[Required]
public string ContentType
{
get;
set;
}
public DateTime CreationDate
{
get;
set;
}
/// <summary>
/// Returns the Username of the Creator
/// </summary>
public string CreatorName
{
get;
set;
}
/// <summary>
/// Returns the Creators PK ID
/// </summary>
///
[Required]
public string CreatorPKID
{
get;
set;
}
public string CreatorSpecialName
{
get; set;
}
//Eigenschaften
/// <summary>
/// Returns the ID of the Content
/// </summary>
///
public int ID
{
get;
set;
}
/// <summary>
/// Returns Boolean of the Locked Status of the Content
/// </summary>
///
public bool Locked
{
get;
set;
}
public int ReferenceID
{
get;
set;
}
public int[] Tags
{
get; set;
}
public IEnumerable<nContentPostModelText> Texts
{
get; set;
}
#endregion Properties
}
nContentTextBinder:
public class nContentTextBinder
{
#region Properties
public List<bool> Active
{
get; set;
}
public List<string> LangCode
{
get; set;
}
public List<string> LongText
{
get; set;
}
public List<string> MetaDescription
{
get; set;
}
public List<string> MetaKeyWords
{
get; set;
}
public List<string> PreviewText
{
get; set;
}
public List<string> SEOName
{
get; set;
}
public List<int> TextID
{
get; set;
}
public List<string> Title
{
get; set;
}
#endregion Properties
#region Methods
public List<nContentPostModelText> Bind()
{
List<nContentPostModelText> B = new List<nContentPostModelText>();
if (IsN()) return B;
for (int x = 0; x < Active.Count; x++)
{
nContentPostModelText Bb = new nContentPostModelText();
Bb.Active = Active[x];
if (Title.Count > x)
{
Bb.Title = Title[x];
}
if (PreviewText.Count > x)
{
Bb.PreviewText = PreviewText[x];
}
if (LongText.Count > x)
{
Bb.LongText = LongText[x];
}
if (SEOName.Count > x)
{
Bb.SEOName = SEOName[x];
}
if (MetaDescription.Count > x)
{
Bb.MetaDescription = MetaDescription[x];
}
if (MetaKeyWords.Count > x)
{
Bb.MetaKeyWords = MetaKeyWords[x];
}
if (TextID.Count > x)
{
Bb.TextID = TextID[x];
}
if (LangCode.Count > x)
{
Bb.LangCode = LangCode[x];
}
B.Add(Bb);
}
return B;
}
private bool IsN()
{
if (Title == null) return true;
if (PreviewText == null) return true;
if (LongText == null) return true;
if (SEOName == null) return true;
if (MetaDescription == null) return true;
if (MetaKeyWords == null) return true;
if (TextID == null) return true;
if (Active == null) return true;
if (LangCode == null) return true;
return false;
}
#endregion Methods
}
Die View würde den Thread sprengen daher hier nur der Link zur Datei im Repository:
<Link entfernt>
Ich bin echt ratlos. Wär echt nett wenn jemand eine Idee hätte wo der Fehler herkommen könnte.
Ich habe schon alle Dateien durchsucht, ob ich irgendwo was mit der CultureInfo mache aber auch da leider Fehlanzeige.
public class ContentAttachment {
public virtual System.Guid Pkid { get; set; }
public virtual int Nid { get; set; }
public virtual string AttachmentType { get; set; }
public virtual string ContentType { get; set; }
public virtual string FPath { get; set; }
public virtual string FName { get; set; }
public virtual string ThumpNail { get; set; }
public virtual string AttachmentArgument { get; set; }
public virtual string ATitle { get; set; }
}
Ich rufe um anhand der Pkid das Attachment zu kriegen folgende Funktion auf:
public ContentAttachment GetByPKid(Guid pkid)
{
using (ISession session = NHibernateHelper.OpenSession())
{
return session.QueryOver<ContentAttachment>().Where(e => e.Pkid == pkid).Take(1).SingleOrDefault();
}
}
Ich lass aufm SQL Server den Profiler mitlaufen um besser die SQL Queires von nHiernate zu debuggen, jedoch kommt nicht mal ein SQL beim Server an, nhibernate spuckt jedoch auch keinerlei Fehler aus.
Woran könnte das liegen? Ich steht da grad etwas aufm Schlauch.
Es geht die komplette Entity nicht, also selbst wenn ich mir die ersten 100 Zeilen ausgeben lassen möchte kommt nichts zurück.
Nicht direkt mit MSDEPLOY C:\Windows\Microsoft.NET\Framework64\v4.0.30319> msbuild "C:\Program Files (x86)\VisualSVN Server\bin\myproj\myproj.csproj" /p:DeployOnBuild=true;PublishProfile=toBeta
Ich benutze als Repository VisualSVN und entsprechenden Server. Den SVN Server habe ich an mein Build tool "CruiseControl.NET" bereits erfolgreich angedockt.
Ich habe in meinem MVC3 Projekt bei Veröffentlichen das Profil "toBeta", wo ebenfalls der ConnectionString meiner BetaUmgebung automatisch in die Web.config eingefügt wird.
Nun möchte ich nachdem in CruiseControl der Build erfolgreich war, das Projekt per Webdeploy auf den beta server hochschieben.
Leider funktioniert das nicht so wie ich möchte. Ich finde auch leider keinen Parameter, mit dem ich das Profil festlegen kann.
Ui...danke bin auf den Link gekommen wo das Tool aus der 2010 Ultimate gezeigt wurd nochmal und siehse da in VS2012 ist es unter Rechtsklick -> Klassendiagramm anzeigen. Nice... danke :)
ich steh vor einem Problem und hab gehofft mir kann jemand helfen, google und co ergaben leider keine Lösungen für mich.
Ich hab eine Klasse, welche später als Collection genutzt wird, abgeleitet von einem IENumerable.
Innerhalb dieser Klasse hab ich die Funktion "ReturnLangLine".
Der Sinn dahinter ist, dass ich anhand von Attributen die darauf gesetzt sind herausfinden möchte Welcher LangCode und Welches Package genutzt werden soll.
Sind auf der Datenbank diese nicht vorhanden werden Sie ahand der Collection erstellt.
Ich habe erstmal nur den PackageName als Attribut:
[System.AttributeUsage(System.AttributeTargets.All)]
public class LanguagePackage : System.Attribute
{
private string name;
public LanguagePackage(string Code)
{
name = Code;
}
public string Name
{
get{ return this.name; }
}
}
Außerdem möchte ich im Constructor meiner Klasse das Attribut schon auslesen:
public class LanguageDefaultValues : IEnumerable
{
private Dictionary<string, string> myCol = new Dictionary<string, string>();
private LanguagePackage[] packages = null;
private LanguageCode[] codes = null;
private object[] sobjData = null;
private Type baseType = null;
private PropertyInfo[] props = null;
public string Package = "Root";
public string LangCode = "__USER__";
public LanguageDefaultValues()
{
Type t = this.GetType();
MemberInfo MI = typeof(LanguageDefaults.LanguageDefaultValues);
sobjData = MI.GetCustomAttributes(true);
packages = (LanguagePackage[])t.GetCustomAttributes(typeof(LanguagePackage), true);
codes = (LanguageCode[])t.GetCustomAttributes(typeof(LanguageCode), true);
if (sobjData.Length ≥ 1) { }
}
......
Um so auf den Packagetype und den Langcode zu kommen.
In der Praxis sieht das Ganze dann so aus:
public static class Test
{
[LanguagePackage("TESTPKG")]
public static LanguageDefaultValues TEST_LANG_NAME= new LanguageDefaultValues(){
{ "de-DE", "TEST-DEUTSCH" },
{ "en-US", "TEST_ENGLISCH" }};
}
Jedoch gibt er immer aus dass packages = (LanguagePackage[])t.GetCustomAttributes(typeof(LanguagePackage), true);
leer ist.
Ich finde einfach den Fehler nicht. Kann mir wer helfen?
in meinem Backend lade ich die einzelnen Controlls via AJAX (jquery widgets) und render im Controller in MVC3 damit eine View.
Dies klappt auch wunderbar ich kann wie in Windows Fenster öffnen und schließen, sie verschieben etc...
Nun kam ich zum Widget für die Inhaltserstellung. Der Haupttext soll HTML beinhalten daher brauchte ich einen WYSIWYG Editor und habe mich für TinyMCE entschieden.
Hierfür habe ich via NUGET das Package TinyMCE.MVC.Jquery installiert.
Schön und gut der TinyMCE Editor wird auch angezeigt und funktioniert schleudert aber nach Kurzer Zeit wirft er folgende Javascript Fehler aus:
Ich benutze die Standart View für den TinyMCE, welche mitinstalliert wurde:
@*
Don't forget to reference the JQuery Library here, inside your view or layout.
<script src="@Url.Content("~/Scripts/jquery-x.x.x.min.js")" type="text/javascript"></script>
*@
<script src="@Url.Content("~/Scripts/tinymce/jquery.tinymce.js")" type="text/javascript"></script>
<script type="text/javascript">
(function(){
$(function() {
$('#@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)').tinymce({
// Location of TinyMCE script
script_url: '@Url.Content("~/Scripts/tinymce/tiny_mce.js")',
theme: "advanced",
height: "300",
width: "auto",
verify_html : false,
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",
// Theme options
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft,codehighlighting,netadvimage",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : false,
// Example content CSS (should be your site CSS)
content_css : "@Url.Content("~/Scripts/tinymce/css/content.css")",
convert_urls : false,
// Drop lists for link/image/media/template dialogs
template_external_list_url : "lists/template_list.js",
external_link_list_url : "lists/link_list.js",
external_image_list_url : "lists/image_list.js",
media_external_list_url : "lists/media_list.js"
});
});
})();
</script>
@Html.TextArea(string.Empty, /* Name suffix */
ViewData.TemplateInfo.FormattedModelValue /* Initial value */
)
Geladen in der WidgetView wird es so:
View:
@model Models.Core.nContentPostModel
@{
Models.Backend.Content.CategoryModel CM = new Models.Backend.Content.CategoryModel();
}
<style type="text/css">
table.tblCreateContent {
width:100%;
}
table.tblCreateContent td:first-child {
width:50%;
min-height: 30px;
padding:1px;
margin:1px;
vertical-align:top;
text-align:left;
}
table.tblCreateContent tr {
background-color:transparent;
}
table.tblCreateContent tr:hover {
background-color:#e6dede;
}
table.tblCreateContent td:last-child {
width:50%;
padding:1px;
min-height: 30px;
margin:1px;
vertical-align:top;
text-align:right;
}
table.tblCreateContent td input[type] {
height:20px;
}
table.tblCreateContent td input, table.tblCreateContent td select, table.tblCreateContent td textarea{
width:800px;
}
table.tblCreateContent td textarea {
height:150px;
}
a.create-content-help {
cursor:help;
text-decoration:dotted;
}
</style>
<script>
$(function () {
$('.create-content-help').each(function () {
try {
$(this).click(function () {
var x = $(this).closest("tr");
var t = (x[0].title);
$('#help-dialog-create-content').html(t);
$('#help-dialog-create-content').dialog({
width: 600,
height: 'auto',
resizable: false,
title: "Inhalte erstellen - Hilfe",
modal: true
});
$('#help-dialog-create-content').dialog('open');
});
}
catch(e){}
});
});
</script>
<div id="help-dialog-create-content" style="font-size:10px !important;"></div>
<table class="tblCreateContent">
<tr title="Vergeben Sie hier einen Aussagekräftigen Titel. Achten Sie darauf, dass dieser für Suchmaschienen interessant wird wenn der Titel auch im Haupttext, den Suchstichworten, dem Vorschautext und der Meta-Beschreibung vorkommt.">
<td>
<b>Titel:</b><br />
<a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
</td>
<td>
@Html.TextBoxFor(m => m.Title)
</td>
</tr>
<tr title="Geben Sie hier den Vorschautext an. Dieser bietet Besuchern einen groben Vorgeschmack auf den Hauptinhalt.">
<td>
<b>Vorschau Text:</b><br />
<a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
</td>
<td>
@Html.TextAreaFor(m=>m.PreviewText)
</td>
</tr>
<tr title="Geben Sie hier den Inhalt ein. Dieser wird bei der Detailansicht angezeigt.">
<td>
<b>Text:</b><br />
<a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
</td>
<td>
@Html.EditorFor(m => m.LongText)
</td>
</tr>
<tr title="Wählen Sie hier die Kategorie für den Inhalt oder legen Sie eine an."><td>
<b>
Kategorie:
</b><br />
<a href="javascript: new widgetAction('widget:NEW_CATEGORY:open')">Neue Kategorie anlegen</a>
<br />
<a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
</td>
<td>
@Html.DropDownListFor(m => m.CategoryID, new SelectList(CM.CategoryList(),"id","shortName"))
</td>
</tr>
<tr title="Geben Sie hier die Suchmaschienen Beschreibung ein.">
<td>
<b>Meta Beschreibung (Für Suchmaschienen):</b>
<br />
<a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
</td>
<td>
@Html.TextAreaFor(m=>m.MetaDescription)
</td>
</tr>
<tr title="Geben Sie hier Stichworte für die Suchmaschienen ein. Trennen Sie diese mit einem Komma.">
<td><b>Meta Stichworte (Suchstichworte)</b><br />
<a href="javascript:void(0)" class="create-content-help">Hilfe?</a></td>
<td>@Html.TextAreaFor(m => m.MetaKeyWords)</td>
</tr>
<tr title="Wenn diese Box markiert ist, wird der Beitrag im Frontend sofort nach dem Speichern sichtbar">
<td><b>Beitrag direkt freigeben?</b><br />
<a href="javascript:void(0)" class="create-content-help">Hilfe?</a></td>
<td>
@Html.CheckBoxFor(m => m.Locked)
</td>
</tr>
<tr>
<td title="Datei Anhänge sind Bilder, Videos oder Downloads. Sie können den Anhängen auch Rollen geben, wie etwa in Newsbeiträgen INDEX BILD als Anzeige-Bild für den Newsbeitrag."><b>Dateianhänge:</b></td>
<td>
<div class="ui-widget">
<div class="ui-state-highlight ui-corner-all" style="padding: 10px;">
<p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
<strong>Noch nicht möglich:</strong> Sie müssen den Inhalt erst speichern, ehe Sie Anhänge registrieren können.</p>
</div>
</div>
</td>
</tr>
</table>
Model:
public class nContentPostModel
{
public int ReferenceID {
get;
set;
}
//Eigenschaften
/// <summary>
/// Returns the ID of the Content
/// </summary>
///
public int ID
{
get;
set;
}
/// <summary>
/// Returns the Title of the Content
/// </summary>
///
[Required]
public string Title
{
get;
set;
}
/// <summary>
/// Returns the Content Type of the Content
/// </summary>
///
[Required]
public string ContentType
{
get;
set;
}
/// <summary>
/// Returns the Category object
/// </summary>
///
[Required]
public object CategoryID
{
get;
set;
}
/// <summary>
/// Returns the Creators PK ID
/// </summary>
public object CreatorPKID
{
get;
set;
}
/// <summary>
/// Returns the Username of the Creator
/// </summary>
public string CreatorName
{
get;
set;
}
/// <summary>
/// Returns Boolean of the Locked Status of the Content
/// </summary>
///
[Required]
public bool Locked
{
get;
set;
}
/// <summary>
/// Returns the COMMA SEPERATED Meta-Keywords
/// </summary>
///
[DataType(DataType.Text)]
public string MetaKeyWords
{
get;
set;
}
/// <summary>
/// Returns the MetaDescription
/// </summary>
///
[MaxLength(250)]
[DataType(DataType.Text)]
public string MetaDescription
{
get;
set;
}
/// <summary>
/// Returns the PreviewText
/// </summary>
///
[Required]
[DataType(DataType.Text)]
[MaxLength(400)]
public string PreviewText
{
get;
set;
}
/// <summary>
/// Returns the Content Long Text
/// </summary>
///
[Required]
[UIHint("tinymce_jquery_full"), AllowHtml]
public string LongText
{
get;
set;
}
}
Ich weiß langsam keinen Rat mehr woran das liegen kann. Nach dem Der Fehler aufgetreten ist muss ich die Seite neuladen, da die Grids(Benutze dafür Flexigrid) nicht mehr geladen werden und auch jqueryUI Tabs nicht mehr funktionieren. Komischer Weise funktioniert das Öffnen und das Schließen noch der "Fenster".
Hat wer einen Tip für mich? Es passiert nur wenn ich ein Widget lade wo der Editor eingebunden ist.
Deine Routingbeispiele waren perfekt und dank den letzten VS Stunden (Vernetzte System - Switch Routing Tabellen ;) ) in der BS kam mir heut erst die zündene Idee.
Und die Lösung war einfach^^
Die "Adressierung" war falsch.
Undzwar dank der Erweiterung RouteDebugger (die ich euch nicht vorenthalten möchte, ist für NuGet Package Manager) kam ich darauf, dass der aufgerufene Namespace nicht stimmt.
Ich hatte im news Controller den namespace "Module.News" doch es wurde probiert den Projektstandartnamespace aufzurufen unter dessen Namen logischer Weise der News Controller nicht zu finden war.
Also für alle die neu im Routing sind wie ich das Toll hier hilft enorm:
Kleine Info, das Tutorial auf der Herstellerseite ist veraltet. Einfach installieren wie dort beschrieben und hinterher nicht vergessen die DLL wieder zu löschen wenn ihr fertig seid;) der zeigt die debug info dauerhaft an solang die DLL vorhanden ist.
Meintest du diesen Article? blogs.msdn.com/b/dparys/archive/2010/09/13/routen_2d00_in_2d00_aspnet_2d00_mvc_2d00_definieren.aspx
da es eine Portable Area ist sehe ich auf MVCcontrib -> Docu, dass ich den AreaName vorne dran hängen muss.
Ich habe daher jetzt folgendes probiert: EDIT: Kleinen Denkfehler gefunden. Route hieß immer noch /{page}, habe ich geändert, geht leider trotzdem noch nicht :-(
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using nCMSNET.ViewEngine;
using MvcContrib.PortableAreas;
using MvcContrib;
namespace nCMS_NET.News
{
public class NewsRegistration:PortableAreaRegistration
{
public override void RegisterArea(System.Web.Mvc.AreaRegistrationContext context, IApplicationBus bus)
{
/*context.MapRoute(
"News_Default",
AreaName +"{controller}/{action}/{id}/{category}/{subcategory}",
new { controller = "News", action = "Archive", id=UrlParameter.Optional, category = UrlParameter.Optional, subcategory=UrlParameter.Optional }
);
*/
context.MapRoute(
"News_Show_Paging",
AreaName +"{controller}/{action}/{id}/{p}",
new { controller = "News", action = "Show", id="", p=""}
);
/*
context.MapRoute(
"News_Show",
AreaName + "{controller}/{action}/{id}",
new { controller = "News", action = "Show", id = "" },
new string[] { "MvcContrib.PortableAreas" }
);*/
RegisterAreaEmbeddedResources();
}
public override string AreaName
{
get { return "News"; }
}
}
}
Funktioniert bisher leider immer noch nicht.
Was mich wundert...es ist nicht die ASP.net 404 Seite.... ich glaub die vom IIS:
Hier der Code der kompletten Action des Controllers:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using nCMS_NET.nModules;
using Module.News.Models;
using nCMS_NET.CORE.SqlHelper;
using System.Data.SqlClient;
using nCMS_NET;
using nCMS_NET.Pagination;
using nCMS_NET.MemberShip;
using nCMS_NET.CORE.Permissions;
using nCMS_NET.CORE.Captcha;
using nCMS_NET.CORE.GlobalSettings;
namespace Module.News
{
public class NewsController : Controller
{
[HttpGet]
public ActionResult Show(string id="", string p ="") {
int page = 0;
int.TryParse(p, out page);
if (String.IsNullOrEmpty(id)) throw new Exception("ID IS NULL!");
SqlHelper Sql = new SqlHelper();
Sql.SysConnect();
if (page < 1) page = 1;
SqlParameter[] P = new SqlParameter[] { new SqlParameter("@seo", id) };
SqlDataReader R = Sql.SysReader("SELECT id FROM "+ new nCMS_NET.CORE.ThisApplication.ThisApplication().getSqlPrefix +"Content WHERE SEOname=@seo", P);
List<nCMS_NET.Content.nContent> Entry = new List<nCMS_NET.Content.nContent>();
List<nCMS_NET.Content.nContent> Comments = new List<nCMS_NET.Content.nContent>();
if (!R.HasRows) return RedirectToActionPermanent("Code/404", "Error");
else {
R.Read();
int idd = ((int)R["id"]);
nCMS_NET.Content.ContentManagement.GetContent G = new nCMS_NET.Content.ContentManagement.GetContent(idd);
nCMS_NET.Content.ContentManagement.GetContent C = new nCMS_NET.Content.ContentManagement.GetContent(new string[] { "eNewsComment" },null,null,"{prefix}Content.cDate","DESC",false,page,10,idd);
Entry = G.getList();
Comments = C.getList();
if (Entry.Count == 0) RedirectToActionPermanent("Code/404", "Error");
Entry[0].GenerateLink();
if (Entry[0].ContentType != "eNews") RedirectToActionPermanent(Entry[0].TargetAction, Entry[0].TargetController);
nPagingCollection pages = new nPagingCollection(C.TotalRows, 10);
ViewData["TotalRows"] = C.TotalRows;
ViewData["Show"] = Comments.Count;
ViewData["Pages"] = pages;
ViewData["Page"] = page;
}
R.Close();
Sql.SysDisconnect();
ViewData["Entry"] = Entry[0];
ViewData["Comments"] = Comments;
return View();
}
//
// GET: /News/
public ActionResult Index()
{
return RedirectToAction("Archive");
}
public ActionResult Archive(int id=1, string category = "", string subcategory = "")
{
int page = id;
if (id < 1) page = 1;
nCMS_NET.CORE.GlobalSettings.GlobalSettings G = new nCMS_NET.CORE.GlobalSettings.GlobalSettings();
int max = 0;
if (String.IsNullOrEmpty(G.Read("GLOBAL_NEWS_MAX_ENTRIES")))
{
G.Write("GLOBAL_NEWS_MAX_ENTRIES", "10");
}
max = Convert.ToInt32(G.Read("GLOBAL_NEWS_MAX_ENTRIES"));
nCMS_NET.Content.ContentManagement.GetContent News = new nCMS_NET.Content.ContentManagement.GetContent(new string[] {
"eNews"
}, null, null, "{prefix}Content.cDate", "DESC", false, page, max);
List<nCMS_NET.Content.nContent> N = News.getList();
nPagingCollection pages = new nPagingCollection(News.TotalRows, max);
ViewData["TotalRows"] = News.TotalRows;
ViewData["News"] = N;
ViewData["Show"] = N.Count;
ViewData["Pages"] = pages;
ViewData["Page"] = page;
return View();
}
}
}
Ich hoffe ich stell mich gerade nich allzu unklug an, aber dieses Routing möchte irgendwie nicht in meinen Kopf :-/
Wenn ich die URL News/Show/<Topicname> Aufrufe funktioniert alles. Möchte man jedoch in den Kommentaren die Seite (von 1 zu 2 zb) wechseln kommt bei News/Show/<Topicname>/1 eine 404 Seite.
Ich weiß leider nicht wo der Wurm drin ist.
Anbei das Script zum Registrieren der PortableArea:
public override void RegisterArea(System.Web.Mvc.AreaRegistrationContext context, IApplicationBus bus)
{
context.MapRoute(
"News_Default",
AreaName +"{controller}/{action}/{id}/{category}/{subcategory}",
new { controller = "News", action = "Archive", id=UrlParameter.Optional, category = UrlParameter.Optional, subcategory=UrlParameter.Optional }
);
context.MapRoute(
"News_Show",
AreaName + "{controller}/{action}/{id}",
new { controller = "News", action = "Show", id = UrlParameter.Optional},
new string[] { "MvcContrib.PortableAreas" }
);
context.MapRoute(
"News_Show_Paging",
AreaName +"{controller}/{action}/{id}/{page}",
new { controller = "News", action = "Show", id = UrlParameter.Optional, page = UrlParameter.Optional},
new string[] { "MvcContrib.PortableAreas" }
);
RegisterAreaEmbeddedResources();
}
Und so ist im news controller die Funktion Show aufgebaut:
public ActionResult Show(string id, int page = 1) {
//.....
ViewBag.P = page;
return View();
}
gnaf...ich glaube ich hab den fehler....gerade die wichtigste datenbank die meiner webseite.... ist beschädigt...ich dachte mir gleich, dass bei sovielen einträgen 3mb niemals hinkommen könnte... alle tabellen fehlen :( SQL Server geht aber wieder....die beta umgebung ist da...samt inhalte... son mist :(
Habe gehofft, um eine Neuinstallation rum zu kommen.
Bin mir jetzt nur nicht sicher, ob ich meine Datenbanken samt Inhalte verlieren würde.
Ich kann kein Backup Script starten, da ich auch übers MSSQL Server Management Studio (auf dem Server) nicht auf den Server komme.
Werden Datenbanken gelöscht bei einer Reperatur / Neuinstallation?
Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Handshakes vor der Anmeldung trat ein Fehler auf. (provider: Named Pipes-Provider, error: 0 - Kein Prozess ist am anderen Ende der Pipe.) (Microsoft SQL Server, Fehler: 233)
Danke funktioniert gut....also kleine rückfrage zur not google mich nochmal durch.....der datentyp vom parameter ist egal, der muss nur ID heißen oder?