Laden...

[erledigt] Problem mit WPF WCF und EntityFramework ConnectionString

Erstellt von kat_2403 vor 11 Jahren Letzter Beitrag vor 11 Jahren 8.070 Views
K
kat_2403 Themenstarter:in
236 Beiträge seit 2007
vor 11 Jahren
[erledigt] Problem mit WPF WCF und EntityFramework ConnectionString

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:> Fehlermeldung:

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

B
387 Beiträge seit 2005
vor 11 Jahren

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

K
kat_2403 Themenstarter:in
236 Beiträge seit 2007
vor 11 Jahren

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

K
kat_2403 Themenstarter:in
236 Beiträge seit 2007
vor 11 Jahren

hm ... ändert leider nix am Verhalten ...

2.891 Beiträge seit 2004
vor 11 Jahren

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.

K
kat_2403 Themenstarter:in
236 Beiträge seit 2007
vor 11 Jahren

Okay, ich habe jetzt NUR in der Bibliothek, in der der Service definiert ist, die ConnectionString Werte gesetzt, bekomme nun den Fehler:> Fehlermeldung:

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 > Fehlermeldung:

"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."}

2.891 Beiträge seit 2004
vor 11 Jahren

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.

K
kat_2403 Themenstarter:in
236 Beiträge seit 2007
vor 11 Jahren

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]

P
40 Beiträge seit 2011
vor 11 Jahren

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)

Fehlermeldung:
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.

K
kat_2403 Themenstarter:in
236 Beiträge seit 2007
vor 11 Jahren

Wenn ich den ConnString aus der app.config der Konsolenanwendung nehme, bekomme ich gleich den Fehler:> Fehlermeldung:

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. > Fehlermeldung:

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 ...> Fehlermeldung:

Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme ausgelöst: Fehler beim Deserialisieren von Parameter
>
. 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:> Fehlermeldung:

Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme ausgelöst: Fehler beim Deserialisieren von Parameter
>
. 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 ...

Hinweis von gfoidl vor 11 Jahren

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