是否可以将从Web服务返回的类型重用于常见DLL中的类型?

时间:2015-05-01 16:21:19

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

我的google-fu还不够。

我有两个使用通用DLL的Web服务,该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引用时,我确保选中“在引用的程序集中重用类型”,并设置为“在所有引用的程序集中重用类型”。但是,这似乎不像我预期的那样工作。

当我在客户端应用中调用WebServiceA.Authenticate(...)时,它会返回WebServiceA.AuthObject类型。

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

2 个答案:

答案 0 :(得分:1)

所以,我找到了答案,这很简单。 1)您必须使用A WCF服务。 (我是。) 2)在配置中,打开现有的"重复使用类型..." (我做了。)

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

答案 1 :(得分:0)

您不能使用相同的实例,但为什么不为您的服务创建正确的实例?换句话说,

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

等?

您可以在GlobalDLL中创建一个方法来集中逻辑以“复制”这些对象。