我是 C# 和 WCF 的新手,来自 Java 背景。
我有一个托管在 IIS 上的 WCF 服务的解决方案,它有一个 Employee 类和一个方法......
public Employee getEmployee(int loginId)
此方法获取 loginId,查询数据库并使用结果创建一个 Employee 对象,然后返回 Employee 对象。很简单。
所以我有一个客户端,到目前为止,它所做的只是调用一个简单的“Hello World”Web 方法来向我证明它已正确配置为与服务对话。现在我想要一个登录按钮来获取输入的 loginId,调用 getEmployee,并使用返回值创建一个本地 Employee 对象。
所以,我对如何在客户端定义 Employee 类感到困惑?关于如何做如此简单的事情的信息并不多。就像 AXIS2 和 NetBeans for Java 一样,这将是非常简单的,有很多教程来展示如何,但是对于 WCF,似乎每个教程都假设我没有某些知识。
所以下面的帖子说这可以通过在单独的程序集中定义我的 Employee 类来完成,并从 WCF 服务项目和客户端项目中引用 .dll(顺便说一句,两者都在单独的解决方案中)。
它说“您可以创建一个合同程序集(一个包含您的瘦域模型(例如 Person 等)的程序集,您可以将自己的逻辑添加到其中。”,但没有解释如何执行此操作或提供任何参考我在哪里可以找到更多信息或说明。
无论如何,我的 Employee 类已经直接在 WCF 服务项目中定义了。如果有人可以提供有关如何将其移至“合同程序集”的任何信息(我是 C# 菜鸟,以前甚至从未创建过 DLL;只是 Windows 窗体项目),那将不胜感激。
另外,我在同一篇文章的另一个答案中看到以下内容......
“1.如果你不能改变dll的来源,并且想调用dll的公共方法,最好使用反射。所以,你从WCF接收对象,设置Person属性返回值,调用方法。”
我理解上面的概念;我会在客户端定义一个单独的 Employee 类,然后以某种方式使用反射从 web 方法返回的对象中获取值,并将它们分配给一个新的 Employee 对象,对吧?只是,我不知道如何使用反射来获取值。
什么是最佳做法?我是否应该像其他帖子所建议的那样定义一个 IEmployee 接口,然后将其放入具有常规 Employee 类的 DLL 中,并从服务器和客户端引用它,并从 web 方法返回 IEmployee 而不是 Employee?如果这是最好的做法,是否有什么特别的事情需要做,或者只要这样的 DLL 在双方都引用,我可以直接做这样的事情吗?
int loginId = Int32.Parse(this.loginInputTxt.Text);
LaborService.LaborServiceClient proxy = new LaborService.LaborServiceClient();
Employee emp = (Employee)proxy.getEmployee(loginId);