如何在同一应用程序中使用一个EF DataContract和2个WCF服务

时间:2016-07-15 20:29:16

标签: c# wcf entity-framework-6

我正在努力让它发挥作用。我有一个多个相同的 - 使用EF安装在不同服务器上的WCF服务。他们每个人都在不同的SQL Server实例上访问不同的数据库。

我正在尝试创建一个允许我同时连接到Instance1.MyDatabase和Instance2.MyDatabase的方法。

我只能在app.config中创建1个端点地址,因为EF数据只有1个合同。这是app.config中的端点

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

在为Entity Framework对象创建数据上下文对象时,我尝试使用两个不同的URI。

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

Context1返回数据和Context2会发生什么,而创建和查询没有错误,不会返回任何记录。我已尝试在配置中输入新端点,但它不会编译,因为两个端点都使用相同的合同。

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

好吧,即使发布这个问题我也觉得很蠢。如果您在发布之前获得术语,它会有所帮助。如果您在配置文件中引用了正确的服务,它也会有所帮助。

我在配置中有很多信息。没有任何借口,但无论如何我都会使用它。

因此,要使用相同的Entity Framework WCF服务定义访问两个不同的服务,它实际上只是为正确的服务创建端点!我有拼写错误,这就是为什么它没有工作。

首先,您需要在appSettings中引用URI:

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

其次,您需要为端点提供webHttpBinding:

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

第三,您需要两个端点来匹配URI:

<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="*"/>

完成。