有没有办法破解Reference.svcmap生成一个特定的svcutil等价物?

时间:2010-07-13 17:43:55

标签: wsdl wcf-client

在我控制之外的一组提供的WSDL和XSD中正确生成代码时,我遇到了一些问题。要获得使用自定义FaultException的正确代理类,我有以下svcutil参数:

svcutil /t:code /out:InvoiceService_v1.cs /n:*,Test.Invoice_v1 /UseSerializerForFaults *.wsdl *.xsd /config:InvoiceService_v1.config

如果我使用Visual Studio添加服务引用,则生成的代理会错误地解释自定义Fault定义。我需要的设置在Visual Studio自定义工具中不可用。

但是,我可以看到Add Service Reference工具生成的Reference.svcmap。里面有许多客户选择:

<ClientOptions>
    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
    <EnableDataBinding>true</EnableDataBinding>
    <ExcludedTypes />
    <ImportXmlTypes>false</ImportXmlTypes>
    <GenerateInternalTypes>false</GenerateInternalTypes>
    <GenerateMessageContracts>false</GenerateMessageContracts>
    <NamespaceMappings />
    <CollectionMappings />
    <GenerateSerializableTypes>true</GenerateSerializableTypes>
    <Serializer>Auto</Serializer>
    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
    <ReferencedAssemblies />
    <ReferencedDataContractTypes />
    <ServiceContractMappings />
  </ClientOptions>

是否可以调整这些设置以便我可以使用GUI,而不是每次都使用svcutil?

Svcutil不会自动下载和解析远程XSD,第三方也将WSDL拆分为单独的绑定和接口。在我甚至可以运行svcutil之前,准备每个WSDL和XSD还需要相当多的手动工作。

GUI使这个过程变得简单,但我无法弄清楚如何强制它使用替代开关。

我已经尝试添加以下ClientOption,但它不起作用。没有错误,但也没有类生成:

<UseSerializerForFaults>false</UseSerializerForFaults>

欢迎任何想法!

1 个答案:

答案 0 :(得分:2)

在我的情况下,我刚编辑了“Reference.svcmap”并保存它,不要担心更新服务引用时它不会自动更改。所以只需在其中添加此属性,然后更新服务引用。