0
votes

I trying to build a WCF hosted in iis but I have an annoying problem.

When I run my client console app and connect to the server I get the error "Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.".

I have three nugets packages installed in my service and client. Entityframework 6.0.0.0, MySql.data 6.9.9 and MySql.Data.Entity 6.9.9.

MySql.Data.Entity requires MySql.Data higher than 6.8.7 and EntityFramework higher than or equal to 6.0.0.0 so I should be fine there. I'm pretty sure I have referenced EF 6.0.0.0 everywhere in my service app.config file but I still get the error.

Does anyone know if something else could cause this? I only have entity framework 6.1.3 installed on my computer, could that be the problem?

I'm kinda stuck in my project so if someone could take the time and help me that would be really nice!

Client project

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>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IWCFProductService" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:50710/ProductService" binding="basicHttpBinding" bindingConfiguration="" contract="ProductInterfaces.IWCFProductService" name="ProductServiceEndpoint" kind="" endpointConfiguration="" />
      <endpoint address="http://erihy283-pc/ProductService/Service.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWCFProductService" contract="ProductService.IWCFProductService" name="BasicHttpBinding_IWCFProductService" />
    </client>
  </system.serviceModel>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v13.0" />
      </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, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider></providers>
  </entityFramework>
<system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data></configuration>

Service project

Packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.0.0" targetFramework="net452" />
  <package id="MySql.Data" version="6.9.9" targetFramework="net452" />
  <package id="MySql.Data.Entity" version="6.9.9" targetFramework="net452" />
</packages>

App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>

  <connectionStrings>
    <add name="adventureworksEntities" connectionString="metadata=res://*/Database.csdl|res://*/Database.ssdl|res://*/Database.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=root;database=adventureworks&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

  <system.serviceModel>
    <services>
      <service name="WCFProductService" behaviorConfiguration="mexBehaviour">

        <endpoint address="ProductService"
                 binding="basicHttpBinding"
                 bindingConfiguration=""
                 name="ProductServiceEndpoint"
                 contract="ProductService.IWCFProductService"
                 behaviorConfiguration="webHttp" />

        <endpoint contract="IMetadataExchange"
                 binding="mexHttpBinding"
                 address="ProductService" />

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:50710" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>

  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

  <runtime>

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" />
      </dependentAssembly>

      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>

  </runtime>

</configuration>

Host project

web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.diagnostics>
    <trace autoflush="true" />
    <sources>
      <source name="System.ServiceModel"
             switchValue="Information, ActivityTracing"
             propagateActivity="true">
        <listeners>
          <add name="sdt"
             type="System.Diagnostics.XmlWriterTraceListener"
             initializeData= "SdrConfigExample.e2e" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

  <system.serviceModel>

    <services>
      <service name="WCFProductService" >

        <endpoint address="ProductService"
                 binding="basicHttpBinding"
                 bindingConfiguration=""
                 name="ProductServiceEndpoint"
                 contract="ProductService.IWCFProductService"
                 behaviorConfiguration="webHttp"/>

        <endpoint address="http://localhost:50710/svc/mex"
                 binding="mexHttpBinding"
                 bindingConfiguration=""
                 contract="IMetadataExchange"/>

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:50710" />
          </baseAddresses>
        </host>

      </service>
    </services>


    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>

      <endpointBehaviors>
        <behavior name="webHttp">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>

  </system.serviceModel>

</configuration>

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.0.0" targetFramework="net452" />
  <package id="MySql.Data" version="6.9.9" targetFramework="net452" />
  <package id="MySql.Data.Entity" version="6.9.9" targetFramework="net452" />
</packages>

I have application pool ASP.NET v4.0 set in iis!

1
I'm sure it has something to do with that <dependentAssembly> tag for EntityFramework in your App.Config... msdn.microsoft.com/en-us/library/twy1dw1e(v=vs.110).aspx Exactly what to do to fix it... I'm not ceratin.Bill Keller

1 Answers

0
votes

The error message usually comes up because the packages you're asking to load aren't present. One way to check this is to look in your "packages" folder for the solution (if you can find it), where you should see a folder for each package that is being used. It's important that the version number of this folder matches the one you're asking for. It might be that you have EntityFramework.6.1.3, instead of EntityFramework.6.0.0 (which your packages.config file is asking for).

In Visual Studio you can use the Package Manager Console (Tools -> NuGet Package Manager -> Package Manager Console), and use the command update-package EntityFramework -version 6.0.0. This should do the update for you to the specific version you're asking for, and download the packages using NuGet if it can't find them locally.