WCF 和返回的对象名称

Posted

技术标签:

【中文标题】WCF 和返回的对象名称【英文标题】:WCF and returned object names 【发布时间】:2012-11-18 22:52:11 【问题描述】:

我是 WCF 新手,遇到了一个我似乎找不到答案的问题。

我有两个项目。一个是简单的登录应用程序,另一个是连接到数据库的托管 IIS WCF 服务 (.svc)。这两个项目都是 .NET 4。

WCF 服务有两种方法:“Administrator_Login”和“User_Login”。

每当调用每个方法时,它们都会执行与该方法相关的一些代码:Administrator.Login.Execute 和 User.Login.Execute(我将我的代码组织到命名空间中,Administrator.Login 和 User.Login 是类names 和 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() 

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果您将“LoginOut”的定义分离到一个类库中,然后从您的客户端项目中引用该类库,并更新服务引用,那么您应该得到您正在寻找的行为。如果不执行 configureServiceReference,请单击高级并确保选中“在所有引用的程序集中重用类型”。

请注意,这不是执行 SOA 的“纯粹”方式。这会将您的客户端和 Web 服务绑定在一起,这可能会给您带来麻烦。但是,我自己在不同的小规模情况下完成了此操作,并且没有遇到任何问题。

此解决方案可能有点繁重,具体取决于所需的行为。它涉及将库 DLL 的副本分发给每个客户端。这可能非常强大,因为您正在使用数据有效地分配行为,但对于手头的问题可能有点过头了。

【讨论】:

感谢您的回复。但是,选择 Reuse Types In All Reference Assemblies 后,问题依然存在。实现这一目标的正确方法是什么?也许我的方法是错误的。 您是否有来自客户端对定义类的库的引用? 另外,我将定义移动到客户端和 WCF 服务都使用的类库中,但我仍然遇到这个问题。 是的。我将所有返回类型移动到一个类库中,并从 WCF 和客户端应用程序中引用了同一个库。我仍然有原来的问题,我不知道该怎么办。 一切都在同一个解决方案中吗?也许您应该发布您的服务方法。有时最好的办法是从头开始一个新的解决方案,并尝试快速获得您想要工作的功能。我能够在 5 分钟内为此创建概念验证。

以上是关于WCF 和返回的对象名称的主要内容,如果未能解决你的问题,请参考以下文章

WCF、EF 和 UWP

WCF 服务修改返回对象属性影响

如何从安静的 WCF 服务返回对象列表

Visual Studio 中的 WCF Web 服务

从 WCF 服务返回的 XML 中缺少集合项值

WCF REST入门套件 - 名称为“UriTemplateMatchResults”的属性已存在