1

我需要在我当前的 SS webapi 中托管几个 SOAP12 消息。我已经根据规则设置了所有命名空间,并且在某种程度上,一切都按预期工作。我可以使用多种工具将 SOAP 发送到服务并且它们可以工作。我已成功将它们作为服务参考添加到它们工作的 Visual Studio 项目中;至少在我添加 AuthFeature 之前。一旦我添加了 AuthFeature 或任何其他本机 SS 服务,我就无法再添加服务引用。

我的调查使我发现了 AuthService 中使用的 ServiceStack.ServiceInterface.Auth 命名空间中的 DataContract(s) 之间的命名空间差异。不过,我不希望这仅限于 AuthService,同样适用于添加 SwaggerFeature 并设置 Resources 服务时。

这两条消息必须在 SOAP 中可用,并且客户端必须能够将它们添加为服务引用以使用它们。

我的问题:有没有办法为原生 SS 服务设置 DataContract 命名空间,以保持它们的命名空间与我们的 DataContract 命名空间一致?我了解我“可以”编译和维护我自己的 SS 版本,我可以在其中更改导致问题的 ContractNamespace 属性,但这会在维护过程中造成很多撤消痛苦,尤其是在尝试从其更新 SS 时原始来源。

我意识到属性([DataContract])基本上是编译时常量,并且在编译 ServiceStack 时,命名空间正在设置。我正在寻找任何替代品...

取自我的 AppHost:

SetConfig( new EndpointHostConfig
            {
                MetadataTypesConfig = new ServiceStack.Common.ServiceModel.MetadataTypesConfig(
                    addDefaultXmlNamespace: Namespaces.Services.NS_2013_01 ),
                WsdlServiceNamespace = Namespaces.Services.NS_2013_01,
                WsdlSoapActionNamespace = Namespaces.Services.NS_2013_01,
                //WsdlServiceTypesNamespace
            } );

取自我的 AssemblyInfo:

[assembly: ContractNamespace( "Foo", ClrNamespace = "MvcApplication1.ServiceInterface" )]
4

1 回答 1

1

有一个“hack”,您可以在其中进行相反的操作,内置服务将默认使用命名空间

 http://schemas.datacontract.org/2004/07/ServiceStack

所以不要尝试使用你自己的命名空间,而是使用他们的命名空间。

于 2014-09-29T12:45:04.473 回答