是否可以将从 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..."(我开启了。)
这里是我遇到问题的地方。我不得不删除我想重用的对象,然后将它重新添加到项目中。然后,刷新服务引用。当我这样做时,它按照预期的方式将事物联系起来。
我的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..."(我开启了。)
这里是我遇到问题的地方。我不得不删除我想重用的对象,然后将它重新添加到项目中。然后,刷新服务引用。当我这样做时,它按照预期的方式将事物联系起来。