我正在尝试在WCF中实现工厂模式,但它不起作用。
我创建了一个名为TestServiceLibrary
的WCFServiceLibrary项目。然后我创建了名为EmployeeService
的wcf服务,该服务具有IEmployeeService
接口。
我在ViewAttendance
接口中定义了SaveAttendance
,IEmployeeService
中的方法,并在EmployeeService
类中实现了。然后我创建了一个客户端Web应用程序,它通过创建一个名为“EmployeeServiceRef”的服务引用来使用EmployeeService
,并在Default.aspx.cs后面的代码中调用以下方法
EmployeeServiceRef.IEmployeeService obj = new EmployeeServiceRef.EmployeeServiceClient();
obj.ViewAttendance();
并显示预期结果。然后在TestServiceLibrary
项目中,我创建了另一个名为EmployeeCardReaderService
的类,它实现了IEmployeeService
接口,因为它也有ViewAttendance
方法,但具有不同的实现,所以基本上创建了另一个WCF服务创建一个新的接口并配置为
web.config中的新服务。然后在客户端应用程序中,我创建了另一个服务引用
EmployeeCardReaderServiceRef :
EmployeeCardReaderServiceRef.IEmployeeService obj2 = new EmployeeCardReaderServiceRef.EmployeeServiceClient();
当我致电obj2.ViewAttendance();
时,它会调用ViewAttendance()
的{{1}}方法,而不是EmployeeService
。
请问是否有可能在wcf服务中实现工厂设计模式?如果它是正确的方式,因为它不适合我。我们也可以将工厂模式应用于asmx webservices吗?
EmployeeCardReaderService
namespace TestServiceLibrary
{
[ServiceContract(Namespace="http://www.test.com")]
public interface IEmployeeService
{
[OperationContract]
string ViewAttendance();
[OperationContract]
string ViewEmployee();
[OperationContract]
string ViewDetails();
}
}
namespace TestServiceLibrary
{
public class EmployeeService : IEmployeeService
{
public string ShowWork()
{
return "";
}
#region IEmployeeService Members
public string ViewAttendance()
{
/* TODO. Implementation specific to Device */
return "EmployeeService Attendance";
}
public string ViewEmployee()
{
return "Employee Number 1";
}
#endregion
#region IEmployeeService Members
public string ViewDetails()
{
return "Employee Details are as follows";
}
#endregion
}
class EmployeeCardReaderService : IEmployeeService
{
#region IEmployeeService Members
public string ViewAttendance()
{
/*TODO:
Implementation specific to card reader customer
*/
return "EmployeeCardReaderService Attendance";
}
public string ViewEmployee()
{
throw new NotImplementedException();
}
public string ViewDetails()
{
throw new NotImplementedException();
}
#endregion
}
}
答案 0 :(得分:0)
new EmployeeCardReaderServiceRef.EmployeeServiceClient();
应该阅读
new EmployeeCardReaderServiceRef.EmployeeCardReaderServiceClient();
现在的方式是,你通过两个引用来调用相同的服务。