2012-01-19 19 views
3

我正在使用EF,WCF和Asp.net的應用程序中工作。該應用程序工作正常,只有一個問題。 EF英孚有一個app.config文件,其中連接字符串存在可以在中間服務是WCF的Asp.net配置文件中添加EF的連接字符串嗎?

<?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 PLA CES。

現在這是不可行的。所以我已經從實體框架中完全刪除了配置文件(所以現在它存在於wcf應用程序中)並且它工作正常。

但我想要的是,我想使它存在於Asp.net應用程序的web.config文件中,並且想從WCF app.config文件中刪除它。如果我這樣做,我收到錯誤消息

在配置中找不到指定的命名連接,不打算與EntityClient提供程序一起使用,或者無效。

是不是所有可能的我在找什麼或者我問的東西超出範圍?

請幫

回答

1

如果我理解你的架構正確,ASP.NET應用程序不直接與EF或DB交互,因此沒有必要在其web.config文件中的連接字符串。您只需要WCF服務配置文件中需要數據庫訪問的連接字符串。這意味着連接字符串是不是在兩個地方,這些配置文件,實際上包含了不同的信息:

  • ASP.NET應用程序配置文件中包含WCF服務端點信息
  • WCF服務配置文件包含數據庫連接字符串

假設您可以從WCF服務配置文件中刪除連接字符串並將其放入ASP.NET應用程序配置文件中,但在這種情況下,您必須在每次方法調用時將其發送到WCF服務。這不是一個好的方法,IMO不會比你目前的設置有任何優勢。

您將需要一個aditional的字符串參數添加到您的所有WCF方法來接收從ASP.NET應用程序的連接字符串:

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

糾正你..在這種情況下,我怎麼能讀取連接字符串的WCF中的配置項,將其設置在運行時...? – user1025901

+0

我的意思是在WCF app.cong文件中我有 ..這個特殊的字符串條目我可以在運行時..如此如何? – user1025901

+0

正如你所說的「但在這種情況下,你必須將它發送到每個方法調用WCF服務」..如何做到這一點..請你舉個例子 – user1025901

0

可以公開的連接字符串作爲WCF公共財產:調用Web服務方法,你會從配置讀取連接字符串,並將其傳遞給它之前?

因此可以提供給您的ASP.net應用程序的連接字符串.....

+0

正確,但連接字符串必須在WCF通過地方......我在那裏將它傳遞而來? – user1025901

+0

能否請你解釋一下示例代碼? – user1025901

+0

將連接字符串保存在wcf的配置文件中。現在在wcf頁面中添加一個屬性並使用System.configuration.ConfigurationManager.Appsettings訪問它當訪問wcf時,您會實例化wcf對象,並且此對象將爲您提供通過屬性公開的連接字符串 – Pankaj

相關問題