如何在同一应用程序中使用一个 EF 数据协定和两个 WCF 服务

本文关键字:数据 服务 WCF 两个 EF 一个 应用程序 | 更新日期: 2023-09-27 17:57:23

我试图让它工作时遇到了可怕的时间。 我有一个使用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" />

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

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

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

有没有办法解决这个问题?

如何在同一应用程序中使用一个 EF 数据协定和两个 WCF 服务

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

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

因此,若要使用相同的实体框架 WCF 服务定义访问两个不同的服务,实际上只需创建指向正确服务的终结点即可! 我的有错别字,这就是为什么它不起作用。

首先,您需要在应用设置中引用 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="*"/>

做。