我是WCF的新手并且有一个我似乎无法找到答案的问题。
我有两个项目。一个是简单的登录应用程序,另一个是连接到数据库的托管IIS WCF服务(.svc)。这两个项目都是.NET 4。
WCF服务有两种方法:“Administrator_Login”和“User_Login”。
每当调用每个方法时,它们都会执行与方法相对应的代码:Administrator.Login.Execute和User.Login.Execute(我将代码组织到命名空间中,Administrator.Login和User.Login是类name和Execute是方法的名称。)
两个操作都返回User.Login类或Administrator.Login类中存在的不同“LoginOut”对象。
我的问题是:虽然每个操作都被组织到WCF服务上的命名空间中,但是当我从客户端应用程序向服务添加服务引用并查看返回的对象类型的名称时,我会看到“LoginOut and “LoginOut1”。
有没有办法在命名空间中引用由WCF服务返回的客户端应用程序中返回的对象?
我目前不得不这样做:
Dim loginOut As Service.LoginOut = Service.Administrator_Login().Execute()
Dim loginOut As Service.LoginOut1 = Service.User_Login().Execute()
但我希望能够做到:
Dim loginOut As Service.Administrator.Login.LoginOut = Service.Administrator_Login().Execute()
Dim loginOut As Service.User.Login.LoginOut = Service.User_Login().Execute()
非常感谢任何帮助。
答案 0 :(得分:0)
如果将“LoginOut”的定义分隔到类库中,然后从客户端项目中引用该类库,并更新服务引用,那么您应该获得所需的行为。如果没有执行configureServiceReference,请单击advanced并确保选中“在所有引用的程序集中重用类型”。
请注意,这不是一种“纯粹”的SOA方式。这会将您的客户端和Web服务绑定在一起,从而可能导致您遇到麻烦。不过,我自己在不同的小规模情况下完成了这项工作,并没有遇到任何问题。
此解决方案可能有点沉重,具体取决于所需的行为。它涉及将库DLL的副本分发给每个客户端。这可能是一个非常强大的功能,因为您可以有效地分配您的数据行为,但可能对手头的问题有点过分。