一组DataContracts的两项服务。如何仅生成服务和实施?

克洛伊

这是我的基本情况。我有三项服务。一个是自包含的,并且大多数情况下不会引起问题。另外两个服务托管在同一项目中,并且几乎共享所有相同的DataContracts。这意味着在同一项目中包含它们会引起很多冲突。

不幸的是,仅删除重复的类是不可行的,因为我的公司开始使我们的构建自动化,并且这需要进入构建前事件并使用svcutil.exe。

我首先尝试添加一个名为MyProject.DataContracts的程序集。然后,在MyProject.DataContracts的预构建中,我将运行以下命令:

mkdir "$(ProjectDir)SVC"
chdir "$(ProjectDir)SVC"
svcutil /t:metadata http://localhost/Cmpny.FirstHost.ServiceHost/Foo.svc http://localhost/Cmpny.FirstHost.ServiceHost/Bar.svc http://localhost/Cmpny.StandaloneService.ServiceHost/Service.svc /r:"D:\TFSMAP\AssemblyReferences\Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.dll" /collectionType:System.Collections.Generic.List`1
svcutil /t:code /language:VB Cmpny.FirstHost.DataContracts*.xsd /serializer:DataContractSerializer /dcOnly /out:Cmpny.FirstHost.DataContracts /n:*,Contracts
svcutil /t:code /language:VB Cmpny.StandaloneService.DataContracts*.xsd /serializer:DataContractSerializer /dcOnly /out:Cmpny.StandaloneService.DataContracts /n:*,Contracts
copy Cmpny.StandaloneService.DataContracts.vb "$(ProjectDir)Service References"
copy Cmpny.FirstHost.DataContracts.vb "$(ProjectDir)Service References"
chdir "$(ProjectDir)"
rmdir /S /Q "$(ProjectDir)SVC"

这将运行,替换文件,并使用新文件构建项目。这部分工作正常,因为所有类型都输出到文件中,并显示在装配中。

下一部分给我带来麻烦。我已将此添加到主项目的Pre-Build事件中。

mkdir "$(ProjectDir)SVC"
chdir "$(ProjectDir)SVC"
svcutil /t:code http://localhost/Cmpny.FirstHost.ServiceHost/BusinessDataService.svc?singleWsdl /r:"$(SolutionDir)MyProject.DataContracts\bin\Release\MyProject.DataContracts.dll" /r:"$(SolutionDir)MyProject.DataContracts\bin\Release\Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.dll" /language:VB /out:BusinessDataService /collectionType:System.Collections.Generic.List`1
svcutil /t:code http://localhost/Cmpny.FirstHost.ServiceHost/PremiumReportingService.svc?singleWsdl /r:"$(SolutionDir)MyProject.DataContracts\bin\Release\MyProject.DataContracts.dll" /r:"$(SolutionDir)MyProject.DataContracts\bin\Release\Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.dll" /language:VB /out:PremiumReportingService /collectionType:System.Collections.Generic.List`1
svcutil /t:code http://localhost/Cmpny.StandaloneService.ServiceHost/Service.svc?singleWsdl /r:"$(SolutionDir)MyProject.DataContracts\bin\Release\MyProject.DataContracts.dll" /r:"$(SolutionDir)MyProject.DataContracts\bin\Release\Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.dll" /language:VB /out:PaymentService /collectionType:System.Collections.Generic.List`1 /et:"$(SolutionDir)MyProject.DataContracts\bin\Release\MyProject.DataContracts.dll"
copy BusinessDataService.vb "$(ProjectDir)Service References"
copy PremiumReportingService.vb "$(ProjectDir)Service References"
copy PaymentService.vb "$(ProjectDir)Service References"
chdir "$(ProjectDir)"
rmdir  /S /Q "$(ProjectDir)SVC"

尽管我包含了MyProject.DataContracts.dll,但此过程成功完成,但是它再次生成了DataContract类型。之后,我的项目中有三套DataContract,分别是Foo.svc,Bar.svc和DataContract文件中的三套。

我尝试将clr命名空间更改为与DataContract命名空间相同,但这不起作用。它也改变了我的方法签名,并给了我一个真正惊人的错误量。

TL; DR; 我需要用于服务的通用DataContract文件,所以不会得到重复的DataContract类型。我似乎无法将我的DataContract dll正确地导入svc,因此它会生成两次新的DataContract,分别为每个服务生成一个,并在原始dll中再次生成新的DataContract(应该位于该位置)。

如果有任何不清楚的地方,请告诉我,我尝试过尽可能地描述。

克洛伊

我想通了。

我将合同文件上的序列化器设置为DataContractSerializer。由于某种原因,它默认使用XmlSerializer,因此无法将DataContracts识别为与其创建的类型等效的对象。

我只是将选项“ / serializer:DataContractSerializer”添加到了创建DataContracts的第二个构建事件中。

但是,现在我遇到了另一个问题。我的两个合同没有为其方法生成参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一组DataContracts的两项服务。如何仅生成服务和实施?

来自分类Dev

如何在两项服务之间共享docker容量,其中一项是事实的来源?

来自分类Dev

如何仅获取json之类的文件中的两项

来自分类Dev

即使清单中只注册了一项,应用程序也会显示两项无障碍服务

来自分类Dev

如何重新加载一组systemd服务?

来自分类Dev

如何停止一组systemd定制服务

来自分类Dev

如何为jax-rs cxf生成服务列表

来自分类Dev

Linq带有字符串的聚合仅返回一项而不是两项

来自分类Dev

完成服务后如何停止服务?

来自分类Dev

如何同时执行两项任务

来自分类Dev

生成服务器错误

来自分类Dev

Nrwl Nx 生成服务而不是 lib?

来自分类Dev

在Azure Devops Microsoft托管的生成服务器上安装依赖项的新版本

来自分类Dev

R仅删除一组的重复项

来自分类Dev

使用Google的自动完成服务仅搜索(和输出)国家和/或城市

来自分类Dev

仅将三项中两项的一部分进行比较

来自分类Dev

.Net生成服务类型为“系统”的服务参考

来自分类Dev

如何为一组组件初始化服务中的属性?

来自分类Dev

如何限制对Azure移动服务中一组授权用户的访问?

来自分类Dev

如何在同一组件中注入不同的服务令牌?

来自分类Dev

如何在启动/停止一组服务器时增加 Wildfly 超时?

来自分类Dev

如何在 Swift 中将一组对象发送到服务器?

来自分类Dev

如何迭代一组值并调用返回承诺的服务并等待 Angular 6 中的每个结果

来自分类Dev

openssl 1.0.2,如何强制服务器只选择一组密码

来自分类Dev

两项规则中的一项不触发

来自分类Dev

两项规则中的一项不触发

来自分类Dev

GCM-如何为Android推送通知生成服务器API密钥

来自分类Dev

如何在Angular中生成服务器端会话变量?

来自分类Dev

如何在熊猫数据框中仅获取具有给定值(或一组值)的行*和仅*列

Related 相关文章

  1. 1

    一组DataContracts的两项服务。如何仅生成服务和实施?

  2. 2

    如何在两项服务之间共享docker容量,其中一项是事实的来源?

  3. 3

    如何仅获取json之类的文件中的两项

  4. 4

    即使清单中只注册了一项,应用程序也会显示两项无障碍服务

  5. 5

    如何重新加载一组systemd服务?

  6. 6

    如何停止一组systemd定制服务

  7. 7

    如何为jax-rs cxf生成服务列表

  8. 8

    Linq带有字符串的聚合仅返回一项而不是两项

  9. 9

    完成服务后如何停止服务?

  10. 10

    如何同时执行两项任务

  11. 11

    生成服务器错误

  12. 12

    Nrwl Nx 生成服务而不是 lib?

  13. 13

    在Azure Devops Microsoft托管的生成服务器上安装依赖项的新版本

  14. 14

    R仅删除一组的重复项

  15. 15

    使用Google的自动完成服务仅搜索(和输出)国家和/或城市

  16. 16

    仅将三项中两项的一部分进行比较

  17. 17

    .Net生成服务类型为“系统”的服务参考

  18. 18

    如何为一组组件初始化服务中的属性?

  19. 19

    如何限制对Azure移动服务中一组授权用户的访问?

  20. 20

    如何在同一组件中注入不同的服务令牌?

  21. 21

    如何在启动/停止一组服务器时增加 Wildfly 超时?

  22. 22

    如何在 Swift 中将一组对象发送到服务器?

  23. 23

    如何迭代一组值并调用返回承诺的服务并等待 Angular 6 中的每个结果

  24. 24

    openssl 1.0.2,如何强制服务器只选择一组密码

  25. 25

    两项规则中的一项不触发

  26. 26

    两项规则中的一项不触发

  27. 27

    GCM-如何为Android推送通知生成服务器API密钥

  28. 28

    如何在Angular中生成服务器端会话变量?

  29. 29

    如何在熊猫数据框中仅获取具有给定值(或一组值)的行*和仅*列

热门标签

归档