WCF服务和工厂设计模式

时间:2014-02-26 11:14:46

标签: c# asp.net web-services wcf

我正在尝试在WCF中实现工厂模式,但它不起作用。 我创建了一个名为TestServiceLibrary的WCFServiceLibrary项目。然后我创建了名为EmployeeService的wcf服务,该服务具有IEmployeeService接口。 我在ViewAttendance接口中定义了SaveAttendanceIEmployeeService中的方法,并在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
    }
}

1 个答案:

答案 0 :(得分:0)

new EmployeeCardReaderServiceRef.EmployeeServiceClient();

应该阅读

new EmployeeCardReaderServiceRef.EmployeeCardReaderServiceClient();

现在的方式是,你通过两个引用来调用相同的服务。