我必须使用通过WSDL定义提供的SOAP Web服务。添加服务引用后,将生成以下操作代码:
[System.ServiceModel.OperationContractAttribute(Action="http://provided.svc/changeBookingRequest", ReplyAction="http://provided.svc/changeBookingResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
[return: System.ServiceModel.MessageParameterAttribute(Name="return")]
Provided.Service.changeBookingResponse changeBooking(Provided.Service.changeBookingRequest request);
问题在于我想更改签名以使它们大写(并从object
更改对象类型和从return
更改响应字段,因为它们都是C#中的保留关键字并导致{{ 1}}和@object
散布在整个项目中):
@result
为此,我准备了一个简单的PowerShell脚本:
[System.ServiceModel.OperationContractAttribute(Action="http://provided.svc/changeBookingRequest", ReplyAction="http://provided.svc/changeBookingResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
[return: System.ServiceModel.MessageParameterAttribute(Name="return")]
Provided.Service.ChangeBookingResponse ChangeBooking(Provided.Service.ChangeBookingRequest request);
$env:WCF='C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools'
$env:CSC='C:\Windows\Microsoft.NET\Framework\v4.0.30319'
$env:Path="$env:WCF;$env:CSC"
svcutil /svcutilconfig:app.config /d:OutFolder `
/t:code https://*****/**Service?wsdl `
/serializable /reference:'C:\Users\Andrew\****\**.WsdlImport.dll'
包含以下部分:
app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
...
<client>
...
<metadata>
<wsdlImporters>
<extension type="***.WsdlImport.CapitalizeWsdlImporter, ***.WsdlImport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</wsdlImporters>
</metadata>
</client>
</system.serviceModel>
</configuration>
类实现了CapitalizeWsdlImporter
,但我可以假设改变的所有相关属性都是只读的。我只能更改合同名称:
IWsdlImportExtension
我将非常感谢您的帮助!
P.S。哈!虽然没有人对我的问题作出反应,但我遇到的问题让我更深入地考虑在一个项目中隔离那些丑陋的类和服务调用,而没有进一步的,现在只带来了积极的影响。