如何在同一应用程序中使用一个 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 在创建和查询时没有错误,但不返回任何记录。 我尝试在配置中输入一个新的端点,但它不会编译,因为两个端点使用相同的合约。
有没有办法解决这个问题?
好吧,我甚至觉得发布这个问题很愚蠢。 如果您在发布之前正确掌握术语会有所帮助。 如果您在配置文件中引用正确的服务,这也很有用。
我在配置中有很多信息。 没有借口,但无论如何我都会使用它。
因此,若要使用相同的实体框架 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="*"/>
做。