我有一个 WCF 服务,需要我将以下内容添加到Reference.svcmap
<NamespaceMappings>
<NamespaceMapping TargetNamespace="http://schemas.datacontract.org/2004/07/System.DirectoryServices"
ClrNamespace="System.DirectoryServices" />
</NamespaceMappings>
如果我没有该行,我会收到以下错误:
警告 1 自定义工具警告:无法导入 wsdl:portType 详细信息:运行 WSDL 导入扩展时引发异常: System.ServiceModel.Description.DataContractSerializerMessageContractImporter 错误:具有数据协定名称“DirectoryServicesCOMException”的 ISerializable 类型 在命名空间'http://schemas.datacontract.org/2004/07/System.DirectoryServices' 无法导入。无法自定义数据协定命名空间 ISerializable 类型和生成的命名空间 “DomainManagement.Console.UserManagementProxy”与所需的 CLR 不匹配 命名空间“System.DirectoryServices”。检查所需的命名空间是否已 映射到不同的数据合约命名空间并考虑映射它 显式使用命名空间集合。 错误源的 XPath: //wsdl:definitions[@targetNamespace='http://example.com/v1']/wsdl:portType[@name='IUserManagement']
我也知道在客户端和服务器之间有一个通用的 DLL 也可以解决这个问题,但我不想要求任何客户端也有随附的 DLL 来与服务通信。
我了解问题和修复(dll 和编辑文件)。我想知道的是:在主机端有什么我可以做的,所以每个订阅此服务的客户端在 Visual Studio 中生成代理后不需要对服务进行任何额外的配置?(即使用SvcUtil
和使用/n:http://schemas.datacontract.org/2004/07/System.DirectoryServices,System.DirectoryServices
参数不是首选选项)