C# .NET:DDD和ASMX,避免在代理类上使用多个名称空间

C# .NET:DDD和ASMX,避免在代理类上使用多个名称空间,c#,.net,web-services,domain-driven-design,asmx,C#,.net,Web Services,Domain Driven Design,Asmx,我是DDD的新手,目前我试图将项目重构为领域驱动的体系结构。该项目有一个客户端和一个服务器端(ASMX webservice)。现在,我创建了一个名为“Domain”的类库,它被客户端应用程序和服务器引用 现在我希望我的SOAP通信基于我的域模型。但正如您所知,一旦建立了web引用,ASMX web服务就会在客户端中创建某种代理类库。 这导致在不同的名称空间下有两个域实体和值对象 是否可以直接使用域模型进行通信并避免生成ASMX代理类 DDD中如何使用DTO?如您所知,某些域部分可能不可序列化(

我是DDD的新手,目前我试图将项目重构为领域驱动的体系结构。该项目有一个客户端和一个服务器端(ASMX webservice)。现在,我创建了一个名为“Domain”的类库,它被客户端应用程序和服务器引用

现在我希望我的SOAP通信基于我的域模型。但正如您所知,一旦建立了web引用,ASMX web服务就会在客户端中创建某种代理类库。
这导致在不同的名称空间下有两个域实体和值对象

  • 是否可以直接使用域模型进行通信并避免生成ASMX代理类

  • DDD中如何使用DTO?如您所知,某些域部分可能不可序列化(例如,NHibernate/IList用法),因此在过去,我经常创建实体类的更简单DTO版本在域中定义DTO实体是否是一种常见做法


  • 无法使用原始域模型(通过对域模型的引用(而非WEB引用)获得)与ASMX进行通信:您必须使用ASMX公开的模型,该模型相似但不相同(即列表在数组中转换)

    从具有相同名称空间的许多web服务创建许多类是可能的,而且很容易 像这样创建一个.bat文件

    "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\wsdl.exe" /sharetypes /o:C:\code\MyProxy.cs /namespace:MyProxies http://website/FirstService.asmx http://website/SecondService.asmx  
    Pause 
    
    其中
    -
    “C:\Program Files\Microsoft SDK\Windows\v7.0A\bin\wsdl.exe”
    是具有相对路径的wsdl.exe(必须在您的电脑上)
    -
    /sharetypes
    表示输出中只需要一个命名空间
    -
    /o:C:\code\MyProxy.cs
    .cs文件名,它将包含所有创建的类
    -
    /namespace:MyProxies
    是创建的所有类的名称空间
    -
    http://website/FirstService.asmx 
    是您需要调用的Web服务列表
    -
    Pause
    表示您希望窗口的shel保持打开状态,以读取操作反馈



    1) 所有指令必须在一行中(不要按enter键)<代码>暂停在第二行。

    2) 如果
    /o:C:\code\MyProxy.cs
    将成为您的解决方案的一部分(我认为是这样),并且您使用源代码管理,如果您要使用WCF,则必须签出该文件,以被wsdl.exe覆盖,您可以在客户机和服务器都引用的共享程序集中拥有服务接口和DTO类。将您的项目转换为使用WCF可能不太难,但在开始之前还有很多学习要做

    只有当您希望客户端和服务器紧密连接时,共享接口程序集才是一个好的理想,因此除非双方都属于同一个团队,否则共享接口程序集无法正常工作

    通常尝试在服务器和客户机上使用相同的类来设计问题,但是在符合设计的情况下共享类可以节省大量工作


    (很抱歉,我认为您不能将共享程序集与asmx一起使用,它更多的是一个来自.net历史远程处理方面的概念)

    谢谢。服务器和客户端都归我们的团队所有。然而,我现在不想迁移到WCF,尽管从长远来看这应该是正确的方向。关于WCF:我们的客户端软件一直使用.NET2.0,所以关于一些博客,我不得不使用BasicHTTPBinding。此绑定是否也支持使用公共域库?@mbue,您可能可以使用IIS中托管的.net远程处理(我过去做过,如果您控制两端,它工作得很好)。我记得“Ingo-Rammer”书籍在这方面非常有帮助。您选择了哪种解决方案?你试过我的吗?