Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] Problem mit WPF WCF und EntityFramework ConnectionString
kat_2403
myCSharp.de - Member



Dabei seit:
Beiträge: 240

Themenstarter:

[erledigt] Problem mit WPF WCF und EntityFramework ConnectionString

beantworten | zitieren | melden

Hallo,

ich greife in meiner ASLibrary mit EF auf eine SQL Datenbank MS2008 zu.
Das funktioniert problemlos, in meiner TestApp (KonsolenApp).

Meine App.Conf

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="ASEntities" connectionString="metadata=res://*/ASModel.csdl|res://*/ASModel.ssdl|res://*/ASModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=PTSC-LAP-KATJA\SQLSERVER2008;initial catalog=MIS;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Versuche ich über WCF die Daten abzurufen, bekomme ich die Fehlermeldung:
Fehler

Die angegebene benannte Verbindung wurde entweder nicht in der Konfiguration gefunden, ist nicht für die Verwendung mit dem EntityClient-Anbieter gedacht oder ist ungültig.
Detail:

{Ein ExceptionDetail, vermutlich erstellt durch IncludeExceptionDetailInFaults=TRUE, mit dem Wert:
System.ArgumentException: Die angegebene benannte Verbindung wurde entweder nicht in der Konfiguration gefunden, ist nicht für die Verwendung mit dem EntityClient-Anbieter gedacht oder ist ungültig.
bei System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
bei System.Data.EntityClient.EntityConnection..ctor(String connectionString)
bei System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)
bei System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)
bei ASLibrary.ASEntities..ctor() in C:\Projekte\DEV\AS\AS\ASModel.Designer.cs:Zeile 45.
bei ASBusinessManagers.StoryManager..ctor() in C:\Projekte\DEV\AS\ASBusinessManagers\StoryManager.cs:Zeile 17.
bei ASServiceLibrary.ASService.FindStoryList(String storyName) in C:\Projekte\DEV\AS\ASServiceLibrary\ASService.cs:Zeile 20.
bei SyncInvokeFindStoryList(Object , Object[] , Object[] )
bei System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)}

Die App.conf des ServiceHosts sieht so aus:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Auch der Hinweis auf EF bringt nichts. Eine Idee?
LG
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von kat_2403 am .
private Nachricht | Beiträge des Benutzers
Blacal
myCSharp.de - Member



Dabei seit:
Beiträge: 392

beantworten | zitieren | melden

Hi,

verstehe ich das richtig, dass du die Verbindung zum SQL-Server in der App.Conf des Clients konfiguriert hast?
Die würde einfach nur in die Konfiguration des Service gehören.

Gruß
Roland
private Nachricht | Beiträge des Benutzers
kat_2403
myCSharp.de - Member



Dabei seit:
Beiträge: 240

Themenstarter:

beantworten | zitieren | melden

Hallo,
ja, die habe ich in der Klassenbibliothek definiert, wo ich das EF - Model drin habe. Okay, dann versuche ich das, und bau das einfach in den Service rein.
Allerdings verstehe ich dann noch nicht, dass es in einer TestkonsolenApp funktioniert, aber nicht in der WPF Anwendung.
LG
private Nachricht | Beiträge des Benutzers
kat_2403
myCSharp.de - Member



Dabei seit:
Beiträge: 240

Themenstarter:

beantworten | zitieren | melden

hm ... ändert leider nix am Verhalten ...
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 3138

beantworten | zitieren | melden

Zitat von kat_2403
ja, die habe ich in der Klassenbibliothek definiert, wo ich das EF - Model drin habe. [...] Allerdings verstehe ich dann noch nicht, dass es in einer TestkonsolenApp funktioniert, aber nicht in der WPF Anwendung.
Nochmal langsam: Wo genau hast du den Connection-String hinterlegt. Denn wenn du das EF-Modell in einer Klassenbibliothek erstellt hast, musst du darauf achten, dass bei der Ausführung einzig die Konfigurationsdatei der ausführenden Anwendung (*.exe.config) beachtet wird. Wenn du irgendwas in deiner *.dll.config änderst, hat das keinen Einfluss.
Siehe auch [Tutorial] Konfigurationsmodell im .NET Framework.

Das es in deiner Testanwendung funktioniert, kann daran liegen, dass Einstellungen ggf. fest mit einkompiliert werden und diese dann verwendet werden, falls ein entsprechender Abschnitt in der aktuellen Konfig-Datei nicht gefunden werden.
private Nachricht | Beiträge des Benutzers
kat_2403
myCSharp.de - Member



Dabei seit:
Beiträge: 240

Themenstarter:

beantworten | zitieren | melden

Okay, ich habe jetzt NUR in der Bibliothek, in der der Service definiert ist, die ConnectionString Werte gesetzt, bekomme nun den Fehler:
Fehler
Der Server konnte die Anforderung aufgrund eines internen Fehler nicht verarbeiten. Wenn Sie weitere Informationen zum Fehler erhalten möchten, aktivieren Sie entweder IncludeExceptionDetailInFaults (entweder über das ServiceBehaviorAttribute oder das <serviceDebug>-Konfigurationsverhalten) für den Client, um die Ausnahmeinformationen zurück an den Server zu senden, oder aktivieren Sie die Ablaufverfolgung gemäß der Microsoft .NET Framework 3.0 SDK-Dokumentation, und prüfen Sie die Serverablaufverfolgungsprotokolle.
Nehme ich den Connectionstring aus der KonsolenTestApp bekomme ich den Fehler
Fehler
"Die angegebene benannte Verbindung wurde entweder nicht in der Konfiguration gefunden, ist nicht für die Verwendung mit dem EntityClient-Anbieter gedacht oder ist ungültig."}
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 3138

beantworten | zitieren | melden

Zitat von kat_2403
Okay, ich habe jetzt NUR in der Bibliothek, in der der Service definiert ist, die ConnectionString Werte gesetzt, bekomme nun den Fehler
Nochmal die Frage: Was genau hast du gemacht. Beschreibe mal bitte etwas mehr, was für Assemblies du wo hast und in welchen Konfiguratiosndateien du was eingetragen hast.

Denn es gibt wie gesagt nur eine einzige ausschlaggebende config-Datei. Und üblicherweise kann man Bibliotheken selbst nicht konfigurieren, sondern macht dass in der app.config der ausführenden Anwendung.
private Nachricht | Beiträge des Benutzers
kat_2403
myCSharp.de - Member



Dabei seit:
Beiträge: 240

Themenstarter:

beantworten | zitieren | melden

Okay, ich habe
1 Projekt Klassenbibliothek ASLibrary.dll -> hier ist das EF Datenmodell drin. Keine app.config.
2 Projekt ASServiceContracts.dll -> hier ist mein (WCF) Service Interface definiert -> hier gibt es die app.config mit dem ConnectionString

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="ASEntities" connectionString="metadata=res://*/ASModel.csdl|res://*/ASModel.ssdl|res://*/ASModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=PTSC-LAP-KATJA\SQLSERVER2008;initial catalog=MIS;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
3 Projekt ASServiceLibrary.dll -> Implementation der Service (ASService : IASService -> greift auf Methoden von Projekt 4 zu) keine app.config
4 Projekt ASBusinessManagers.dll -> Zugriff auf Daten Projekt 1, keine App.config
5 Projekt ServiceHost ASServiceHost als Konsolenanwendung
mit app.config für den Service

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <!--<serviceDebug includeExceptionDetailInFaults="True" />-->
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
6 Projekt ASPresentation.dll - mit Presenter Interfaces/ViewInterfaces/Presenters mit der app.config für den Service

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IASService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
            <netNamedPipeBinding>
                <binding name="NetNamedPipeBinding_IASService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                    hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
                    maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="Transport">
                        <transport protectionLevel="EncryptAndSign" />
                    </security>
                </binding>
            </netNamedPipeBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:8000/AS/AS" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IASService" contract="ASServiceHost.IASService"
                name="BasicHttpBinding_IASService" />
            <endpoint address="net.pipe://localhost/PipeAS" binding="netNamedPipeBinding"
                bindingConfiguration="NetNamedPipeBinding_IASService" contract="ASServiceHost.IASService"
                name="NetNamedPipeBinding_IASService">
                <identity>
                    <userPrincipalName value="PTSC-LAP-Katja\Katja" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>
Ja und zu guter letzt meine WPF Anwendung, bis jetzt ohne app.config.

LG

[EDIT]
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von kat_2403 am .
Attachments
private Nachricht | Beiträge des Benutzers
Pippl
myCSharp.de - Member



Dabei seit:
Beiträge: 41

beantworten | zitieren | melden

Der ConnectionString gehört in die config des Projekts 5 (ASServiceHost). Da dies die ausführende Anwendung ist (wenn ich die Projektaufzählung richtig verstanden habe)
Fehler
Der Server konnte die Anforderung aufgrund eines internen Fehler nicht verarbeiten. Wenn Sie weitere Informationen zum Fehler erhalten möchten, aktivieren Sie entweder IncludeExceptionDetailInFaults (entweder über das ServiceBehaviorAttribute oder das <serviceDebug>-Konfigurationsverhalten) für den Client, um die Ausnahmeinformationen zurück an den Server zu senden, oder aktivieren Sie die Ablaufverfolgung gemäß der Microsoft .NET Framework 3.0 SDK-Dokumentation, und prüfen Sie die Serverablaufverfolgungsprotokolle.
... kann auf einen Fehler im Datenvertrag hindeuten.

Diese Zeile

<!--<serviceDebug includeExceptionDetailInFaults="True" />-->
einkommentieren, deine Konsolenanwendung starten (nur diese) und mal die Metadaten URI aufrufen, vielleicht wird sich da schon ein Fehler zeigen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Pippl am .
private Nachricht | Beiträge des Benutzers
kat_2403
myCSharp.de - Member



Dabei seit:
Beiträge: 240

Themenstarter:

beantworten | zitieren | melden

Wenn ich den ConnString aus der app.config der Konsolenanwendung nehme, bekomme ich gleich den Fehler:
Fehler
Die angegebene benannte Verbindung wurde entweder nicht in der Konfiguration gefunden, ist nicht für die Verwendung mit dem EntityClient-Anbieter gedacht oder ist ungültig.
Die scheint also dort rein zu gehören.
Wenn ich den Connstring dort definiere, klappt das auch.
ABER --- die WPF Anwendung läuft nicht.
Jetzt krieg ich allerdings wieder nen neuen Fehler, der sich in den config Settings wahrscheinlich beheben lässt.
Fehler
Das maximale Nachrichtengrößenkontingent für eingehende Nachrichten (65536) wurde überschritten. Verwenden Sie die MaxReceivedMessageSize-Eigenschaft für das entsprechende Bindungselement, um das Kontingent zu erhöhen.
Den Wert hab ich jetzt mal auf 10MB erhöht (10485760) ... Jetzt kommt die Meldung ...
Fehler
Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme ausgelöst: Fehler beim Deserialisieren von Parameter http://tempuri.org/:FindStoryListResult. Die InnerException-Nachricht war "Fehler beim Deserialisieren des Objekts "vom Typ System.Collections.Generic.List`1[[ASPresentation.ASServiceHost.ApplicationStory, ASPresentation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]". Die maximale Länge für Zeichenfolgeninhalt (8192) wurde beim Lesen von XML-Daten überschritten. Dieses Kontingent kann durch Ändern der "MaxStringContentLength"-Eigenschaft des beim Erstellen des XML-Lesers verwendeten "XmlDictionaryReaderQuotas"-Objekts erhöht werden. Zeile 2, Position 31664.". Weitere Details finden Sie unter "InnerException".
Hab ich geändert auf Maximum: 2147483647
Okay, dann folgende Meldung:
Fehler
Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme ausgelöst: Fehler beim Deserialisieren von Parameter http://tempuri.org/:FindStoryListResult. Die InnerException-Nachricht war "Fehler beim Deserialisieren des Objekts "vom Typ System.Collections.Generic.List`1[[ASPresentation.ASServiceHost.ApplicationStory, ASPresentation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]". Die maximale Lesetiefe (32) wurde überschritten, da die gelesenen XML-Daten mehr Verschachtelungsstufen enthalten als das Kontingent zulässt. Dieses Kontingent kann durch Ändern der "MaxDepth"-Eigenschaft des beim Erstellen des XML-Lesers verwendeten "XmlDictionaryReaderQuotas"-Objekts erhöht werden. Zeile 4, Position 140405.". Weitere Details finden Sie unter "InnerException".
Okay, dann habe ich in der Config mehrere Werte auf Maximum gesetzt ....

          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
              maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
Uuuuuuuund .... es funktioniert ....
Ich danke euch ...

Moderationshinweis von gfoidl (12.09.2012 - 13:06:45):

XML-Inhalt bitte mit den [xml[nop][/nop]]-Tags angeben od. mit dem Button der das "X" als Icon hat.

private Nachricht | Beiträge des Benutzers