我的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)
?
答案 0 :(得分:1)
所以,我找到了答案,这很简单。 1)您必须使用A WCF服务。 (我是。) 2)在配置中,打开现有的"重复使用类型..." (我做了。)
这里出现了问题。我不得不删除我想要重用的对象,并将其重新添加到项目中。然后,刷新服务引用。当我按照这个顺序这样做时,它按照预期的方式将事物联系起来。
答案 1 :(得分:0)
您不能使用相同的实例,但为什么不为您的服务创建正确的实例?换句话说,
WebServiceA.AuthObject authObjA = WebServiceA.Authenticate(...);
WebServiceB.AuthObject authObjB = new WebServiceB.AuthObject();
authObjB.prop = authObjA.prop;
等?
您可以在GlobalDLL中创建一个方法来集中逻辑以“复制”这些对象。