ソリューションに3つのプロジェクトがあり、それぞれクライアント、サービス、ホストと呼ぶことができます。WCF:Entity Frameworkと連携するApp.config
私はhttps://msdn.microsoft.com/en-us/library/ms734712%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396に従ってサービスを構築しています。これは私が開発したコンソールホスト上で動作します。
また、データをMySqlに格納するために、Entity Frameworkを使用しています。
質問:Entity Frameworkには、サービスプロジェクトのapp.configで何かが実現されています。しかし、上記のMicrosoftからのリンクは、ホストプロジェクトを開始プロジェクトとして実行するように指示しており、サービスはホストプロジェクトではなくサービスプロジェクトにあるconfigという設定が見つからないという事実につながります。
プロジェクトホストのapp.configをプロジェクトサービスのapp.configに置き換えた場合、例外がスローされます。
コードを動作させるにはどうすればよいですか?
App.configファイル:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</configSections>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" />
</system.web>
<!-- 部署服务库项目时,必须将配置文件的内容添加到
主机的 app.config 文件中。System.Configuration 不支持库的配置文件。 -->
<system.serviceModel>
<services>
<service name="Server.CalculatorService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Design_Time_Addresses/Server/Service1/" />
</baseAddresses>
</host>
<!-- Service Endpoints -->
<!-- 除非完全限定,否则地址相对于上面提供的基址-->
<endpoint address="" binding="basicHttpBinding" contract="Server.ICalculator">
<!--
部署时,应删除或替换下列标识元素,以反映
用来运行所部署服务的标识。删除之后,WCF 将
自动推断相应标识。
-->
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<!-- Metadata Endpoints -->
<!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
<!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除-->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,
请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="True" />
<!-- 要接收故障异常详细信息以进行调试,
请将以下值设置为 true。在部署前设置为 false
以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<!-- <entityFramework>-->
<!-- <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">-->
<!-- <parameters>-->
<!-- <parameter value="mssqllocaldb" />-->
<!-- </parameters>-->
<!-- </defaultConnectionFactory>-->
<!-- <providers>-->
<!-- <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />-->
<!-- <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>-->
<!-- </providers>-->
<!-- -->
<!-- </entityFramework>-->
<entityFramework>
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>
</entityFramework>
<connectionStrings>
<add name="Model1Container" providerName="System.Data.SqlClient"
connectionString="Server=127.0.0.1;user id=root;password=88;persistsecurityinfo=True;database=guessFigure" />
<add name="RankADONETModel"
connectionString="server=127.0.0.1;user id=root;password=88;persistsecurityinfo=True;database=guessFigure"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>