Можно ли добавить строку подключения EF в файл конфигурации Asp.net, где промежуточной службой является WCF? - PullRequest
3 голосов
/ 19 января 2012

Я работаю в приложении, которое использует EF, WCF и Asp.net. Приложение работает нормально только с одной проблемой. EF имеет файл app.config, в котором присутствует строка подключения

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="MyEntities" connectionString="metadata=res://*/DataAccessStrategy.Components.XYZ.csdl|res://*/DataAccessStrategy.Components.XYZ.ssdl|res://*/DataAccessStrategy.Components.XYZ.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MyDataSource;Initial Catalog=MyDataBase;Persist Security Info=True;User ID=xxx;Password=xxx;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Теперь служба WCF является потребителем службы EF, и впредь в этом файле конфигурации у меня есть запись той же строки подключения, что и в

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="MyEntities" connectionString="metadata=res://*/DataAccessStrategy.Components.XYZ.csdl|res://*/DataAccessStrategy.Components.XYZ.ssdl|res://*/DataAccessStrategy.Components.XYZ.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MyDataSource;Initial Catalog=MyDataBase;Persist Security Info=True;User ID=xxx;Password=xxx;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
........
............

Приложение asp.net взаимодействует с WCF, так как его конфигурационный файл как в

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
<wsHttpBinding>
    .......................
    .........................

Как можно понять, строка подключения присутствует в 2 местах.

Теперь это невозможно. Поэтому я полностью удалил файл конфигурации из структуры сущностей (теперь он присутствует в приложении wcf), и он работал нормально.

Но я хочу, чтобы я присутствовал в файле web.config приложения Asp.net и хотел удалить его из файла app.config WCF. Если я это сделаю, я получаю сообщение об ошибке

Указанное именованное соединение либо не найдено в конфигурации, не предназначено для использования с поставщиком EntityClient, либо недействительно.

Это вообще возможно, что я ищу, или я спрашиваю что-то, что выходит за рамки?

Пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 19 января 2012

Если я правильно понимаю вашу архитектуру, приложение ASP.NET не взаимодействует напрямую с EF или DB, поэтому нет необходимости иметь строку подключения в своем файле web.config. Вам нужна только строка подключения в файле конфигурации службы WCF, который требует доступа к базе данных. Это означает, что строка подключения не находится в двух местах, файлы конфигурации фактически содержат различную информацию:

  • Файл конфигурации приложения ASP.NET содержит информацию о конечной точке службы WCF
  • Файл конфигурации службы WCF содержит строку подключения к БД

Гипотетически вы можете удалить строку подключения из файла конфигурации службы WCF и поместить ее в файл конфигурации приложения ASP.NET, но в этом случае вам придется отправлять ее службе WCF при каждом вызове метода. Это не очень хороший подход, и IMO не имеет никаких преимуществ по сравнению с текущей настройкой.

Чтобы получить строку подключения из приложения ASP.NET, вам необходимо добавить дополнительный строковый параметр для всех ваших методов WCF:

public void ServiceMethod(string connectionString)
{
    // use ObjectContext constructor with connectionString parameter
    using (var context = new MyEntities(connectionString))
    {
        // all your EF calls
    }
}

Теперь вы можете переместить строку подключения из файла конфигурации WCF в файл конфигурации ASP.NET. Перед вызовом метода веб-сервиса вы должны прочитать строку подключения из конфигурации и передать ее ей:

var cs = ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString;
wcfServiceClient.ServiceMethod(cs);
0 голосов
/ 19 января 2012

вы можете выставить строку подключения как публичное свойство в WCF?

Таким образом, строка подключения может быть сделана доступной для вашего приложения ASP.net .....

...