2016-07-15 12 views
0

Ich habe eine schreckliche Zeit, die versucht, dies zur Arbeit zu bringen. Ich habe mehrere - identische - WCF-Dienste mit EF auf verschiedenen Servern installiert. Jeder von ihnen greift auf verschiedene Instanzen von SQL Server auf eine andere Datenbank zu.Wie man einen EF DataContract und 2 WCF Services in der gleichen Anwendung verwendet

Ich versuche, eine Methode zu erstellen, mit der ich gleichzeitig eine Verbindung zu Instance1.MyDatabase und Instance2.MyDatabase herstellen kann.

Ich kann nur 1 Endpunktadresse in der app.config erstellen, da es nur 1 Vertrag für die EF-Daten gibt. Hier ist der Endpunkt in dem app.config

 <endpoint address="http://Server01/DataService/Data.svc" 
     binding="basicHttpBinding" 
     contract="Query.IPSIData" 
     bindingConfiguration="WCFHttpBinding" behaviorConfiguration="WCFHttpBehavior" /> 

Wenn ein Datenkontextobjekt für das Entity Framework-Objekt erstellen, habe ich versucht, zwei verschiedene URIs verwenden.

Context1 = new DevEntities(service1URI) 
Context2 = new DevEntities(service2URI) 

Was passiert ist, dass Kontext1 liefert Daten und Kontext2, beim Erstellen und ohne Fehler abfragt, wird keine Datensätze zurück. Ich habe versucht, einen neuen Endpunkt in der Konfiguration einzugeben, aber es wird nicht kompiliert, da beide Endpunkte denselben Vertrag verwenden.

Gibt es einen Weg um dies?

Antwort

0

Ok, ich fühle mich blöd für diese Frage. Es hilft, wenn Sie die Terminologie direkt vor dem Posten erhalten. Es hilft auch, wenn Sie die richtigen Dienste in Ihren Konfigurationsdateien referenzieren.

Ich habe eine Menge Informationen in der Konfig. Keine Entschuldigung, aber ich werde es trotzdem benutzen.

Um auf zwei verschiedene Dienste mit derselben Entity Framework WCF-Dienstdefinition zugreifen zu können, müssen also nur Endpunkte für den richtigen Dienst erstellt werden! Meine hatte Tippfehler, weshalb es nicht funktionierte.

Zuerst müssen Sie die URIs in appSettings verweisen:

<add key="ProductionDataUri" value="http://ProdServer/ProdService.svc"/> 
<add key="QADataUri" value="http://QAServer/QAService.svc"/> 

Zweitens müssen Sie eine webHttpBinding für die Endpunkte:

 <webHttpBinding> 
    <binding name="WCFWebBinding" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:30:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </webHttpBinding> 

Drittens benötigen Sie zwei Endpunkte, die URIs entsprechen:

<endpoint address="http://QAServer/QAService.svc" 
      binding="webHttpBinding" bindingConfiguration="WCFWebBinding" 
      name="WCFQAWebBinding" contract="*"/> 
    <endpoint address="http://ProdServer/ProdService.svc" 
     binding="webHttpBinding" bindingConfiguration="WCFWebBinding" 
     name="WCFProductionWebBinding" contract="*"/> 

Fertig.