C# WCF无法定位ConnectionString
在过去的几天里,我一直在研究WCF。我一直在阅读各种讨论,并遵循一些不同的演练,最明显的是下面链接的演练 我现在正在尝试将这些技能转换为不同的场景。文件结构与上述演练中所述的完全相同。有一个WCF服务库、一个主机(控制台应用程序)和一个客户端(控制台应用程序)。主机设置在与演练相同的庄园中,客户机已更改为允许用户输入而不是硬编码值,下面提供了WCF代码 提供值后,WCF库将一直运行到下一行C# WCF无法定位ConnectionString,c#,.net,web-services,entity-framework,wcf,C#,.net,Web Services,Entity Framework,Wcf,在过去的几天里,我一直在研究WCF。我一直在阅读各种讨论,并遵循一些不同的演练,最明显的是下面链接的演练 我现在正在尝试将这些技能转换为不同的场景。文件结构与上述演练中所述的完全相同。有一个WCF服务库、一个主机(控制台应用程序)和一个客户端(控制台应用程序)。主机设置在与演练相同的庄园中,客户机已更改为允许用户输入而不是硬编码值,下面提供了WCF代码 提供值后,WCF库将一直运行到下一行var userData=repository.GetById(userId)。当到达断点并且我跳过时,将
var userData=repository.GetById(userId)代码>。当到达断点并且我跳过时,将抛出一个异常,说明预期的ConnectionString不存在。我已经测试过将连接字符串放入客户端和WCF项目中,但没有效果。我还确保了EntityFramework和Service。配置DLL也作为引用添加
可能是我缺少了另一个DLL,App.config设置,或者我完全搞砸了,误解了我可以用WCF服务库做什么,所以我正在寻找一些关于如何纠正上一段中的问题的建议或帮助我理解问题的链接
IService.cs代码
[ServiceContract(Namespace = "....")]
public interface IUser
{
[OperationContract]
User GetUser(int userId = 0);
}
[DataContract]
public class User
{
[DataMember]
public int UserId { get; set; }
[DataMember]
public string UserName { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
public class UserService : IUser
{
public User GetUser(int userId = 0)
{
User user = null;
using (var context = new Context())
{
var repository = new Repository(context);
var userData = repository.GetById(userId);
if (userData != null)
{
user = new User
{
UserId = userId,
FirstName = userData.CustomerFirstName,
LastName = userData.CustomerSurname,
UserName = userData.CustomerEmail
};
Console.WriteLine("UserId : {0}", userId);
Console.WriteLine("FirstName : {0}", userData.CustomerFirstName);
Console.WriteLine("LastName : {0}", userData.CustomerSurname);
Console.WriteLine("UserName : {0}", userData.CustomerEmail);
}
}
return user;
}
}
Service.cs代码
[ServiceContract(Namespace = "....")]
public interface IUser
{
[OperationContract]
User GetUser(int userId = 0);
}
[DataContract]
public class User
{
[DataMember]
public int UserId { get; set; }
[DataMember]
public string UserName { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
public class UserService : IUser
{
public User GetUser(int userId = 0)
{
User user = null;
using (var context = new Context())
{
var repository = new Repository(context);
var userData = repository.GetById(userId);
if (userData != null)
{
user = new User
{
UserId = userId,
FirstName = userData.CustomerFirstName,
LastName = userData.CustomerSurname,
UserName = userData.CustomerEmail
};
Console.WriteLine("UserId : {0}", userId);
Console.WriteLine("FirstName : {0}", userData.CustomerFirstName);
Console.WriteLine("LastName : {0}", userData.CustomerSurname);
Console.WriteLine("UserName : {0}", userData.CustomerEmail);
}
}
return user;
}
}
编辑:
您的连接字符串必须在执行程序集的App.config中设置,而不是在直接使用它的程序集中设置。这意味着,尽管您的服务实现(service.cs
)位于WCF库程序集中,但连接字符串必须位于主机项目的App.config中。如果将App.config文件声明到WCF库中,它将被忽略
客户端将不会访问数据库,它将使用访问数据库的服务。因此,无需在客户端App.config中声明连接字符串。我们可以查看您的连接字符串吗?编辑问题后,连接字符串被相应修改。是否直接位于服务器上,如果是:server=localhost;综合安全=SSPI;数据库=主数据
或数据源=。;综合安全=SSPI;初始目录=DbName
。我的理论是,它在确定连接字符串
位置时遇到问题。很抱歉,响应延迟。这3个项目都引用了我发布的连接字符串,以排除任何问题。当我尝试执行类似于“ConfigurationManager.ConnectionString[“ConnectionString”].ConnectionString;”的操作时没有找到任何数据,它返回null,因此您的理论似乎是正确的。这就是为什么我假设APP.CONFIG文件或DLL中缺少配置设置的原因。感谢您的回复,我不太明白为什么,但它已经开始工作了。昨天看了几个小时后,我决定离开它,带着新的想法回来。我昨天读到连接字符串需要在主机文件中,但在测试期间,它没有拾取连接字符串。自从今天上午进行了另一个消除过程以来,它已经开始工作,问题已经得到纠正。既然你的回答是正确的,我就把它标为正确的。