在过去的几天里,我一直在研究WCF。我一直在阅读各种讨论并遵循一些不同的演练,最值得注意的是下面链接的演练。
我现在正试图将这些技能转换为不同的场景。文件结构与上述演练中所述的完全相同。有一个WCF服务库,一个主机(控制台应用程序)和一个客户端(控制台应用程序)。主机设置在与演练相同的区域中,客户端已被更改为允许用户输入而不是硬编码值,并且下面提供了WCF代码。
提供值后,WCF库将一直运行到以下行var userData = repository.GetById(userId);
。当达到断点并且我跳过时,会抛出一个异常,说明预期的ConnectionString不存在。我已经测试过将连接字符串放在Client和WCF项目中但无济于事。我还确保了EntityFramework和Service.Configuration 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; }
}
Service.cs代码
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;
}
}
编辑:
<add name="CONTEXT"
connectionString="Server=SERVER;Database=DATABASE;uid=DATABASE;pwd=DATABASE;"
providerName="System.Data.SqlClient" />
答案 0 :(得分:1)
您的连接字符串必须在执行程序集的App.config中设置,而不是在直接使用它的程序集中设置。这意味着虽然您的服务实现(Service.cs
)位于WCF库程序集中,但连接字符串必须位于主机项目的App.config中。如果将一个App.config文件声明到WCF库中,它将被忽略。
客户端不会访问数据库,它将使用访问数据库的服务。因此,无需在客户端App.config中声明connectiong字符串。