是否可以将从 Web 服务返回的类型重用到来自公共 DLL 的类型?

Is it possible to reuse types returned from web service to a type from a common DLL?

我的google-fu 不够。

我有两个 Web 服务,它们使用一个公共 DLL,该 DLL 包含我的许多常用对象的结构。在我的客户端应用程序中,我实现了这两种 Web 服务,因为客户端应用程序需要做这两件事。在客户端应用程序中,我还包含了公共 DLL。

WebServiceA

[ServiceBehavior]
public class WebServiceA : MyServiceBase, IWebServiceA
{
    ...
    public GlobalDLL.AuthObject Authenticate(...)
    {
        ...
    }
    ...
}

WebServiceB

[ServiceBehavior]
public class WebServiceB : MyServiceBase, IWebServiceB
{
    ...
    public void DoSomeStuff(GlobalDLL.AuthObject auth)
    {
        ...
    }
    ...
}

我的客户端应用程序有两个 Web 服务引用和一个对 GlobalDLL 的引用。

ServiceReferences
    WebServiceA
    WebServiceB
References
    GlobalDLL

当我在客户端应用程序中创建我的 Web 引用时,我确保选中 "Reuse Types in referenced assemblies" 并将其设置为 "Reuse types in all referenced assemblies." 但是,这似乎没有按我预期的方式工作会的。

当我在我的客户端应用程序中调用 WebServiceA.Authenticate(...) 时,它 returns 是 WebServiceA.AuthObject 的一种类型。

如何让我的客户端应用程序相信返回的 WebServiceA.AuthObject 和预期的 WebServiceB.AuthObject 确实是 GlobalDLL.AuthObject,以便我可以将其传递给 WebServiceB.DoSomeStuff(authObject)

您不能使用完全相同的实例,但为什么不为您的服务创建正确的实例呢?也就是说,

WebServiceA.AuthObject authObjA = WebServiceA.Authenticate(...);
WebServiceB.AuthObject authObjB = new WebServiceB.AuthObject();
authObjB.prop = authObjA.prop;

等?

您可以在 GlobalDLL 中创建一个方法来集中 "copying" 这些对象的逻辑。

所以,我找到了答案,而且非常简单。 1) 您必须使用 WCF 服务。 (我是。) 2)在配置中,开启"Re-use types for existing..."(我开启了。)

这里是我遇到问题的地方。我不得不删除我想重用的对象,然后将它重新添加到项目中。然后,刷新服务引用。当我这样做时,它按照预期的方式将事物联系起来。