【发布时间】:2014-04-27 11:40:44
【问题描述】:
我使用其他人的一些应用程序。现在,是时候更新一些服务和功能了。我将新操作添加到旧的 wsdl 文件中,并且我想使用 svcutil 为我的应用程序生成代码。我正在使用来自 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools 的 svcutil,然后键入命令:
svcutil.exe /async /tcv:Version35 c:\Dir\temp\wsdlgen\SckBiService.wsdl /o:c:\Dir\temp\wsdlgen\SckBiServiceTemp.cs
我得到一个文件,其中包含由运行时版本的工具生成的代码:4.0.30319.18444 我的旧代码文件有运行时版本:4.0.30319.296
文件不同,所以如果我更改它们,就会出现错误。 例子: 新有:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://www.myname.com/myname2/privatename/", ConfigurationName="SckBi")] 公共接口 SckBi {
// CODEGEN: Trwa generowanie kontraktu komunikatu, ponieważ operacja „wersja” nie jest ani wywołaniem RPC, ani opakowanym dokumentem.
[System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
[System.ServiceModel.XmlSerializerFormatAttribute()]
WersjaResponse wersja(WersjaRequest request);
旧有:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="SckBiSoapBinding", Namespace="http://www.myname.com/myname2/privatename/")]
public partial class SckBiService : System.Web.Services.Protocols.SoapHttpClientProtocol {
private System.Threading.SendOrPostCallback wersjaOperationCompleted;
private System.Threading.SendOrPostCallback weryfikacjaDanychOperationCompleted;
示例:在旧文件中我有类 SckBiService,在新文件中我有接口 SckBi 和类 SckBiClient。有些领域和操作是不同的,我不知道它在应用程序行为中是否有问题。
是否有任何解决方案可以指定或下载旧版本的 svcutil 并生成类似旧版本的代码?
编辑:
我错过了非常重要的信息。旧生成的代码具有 SckBiService 类并继承自 System.Web.Services.Protocols.SoapHttpClientProtocol。新文件不使用此类。我可以强制 svcutil.exe 做这样的事情吗?
EDIT2:
经过一些研究,我发现旧版本的 svcutil 使用 asmx 客户端基础架构(System.Web.Services.Protocols.SoapHttpClientProtocol 和朋友),而后者使用 WCF 客户端基础架构(System.ServiceModel.ClientBase 和朋友)。 还有一个问题是:如何使用旧版本(asmx 客户端基础架构)生成?
【问题讨论】:
标签: c# wcf svcutil.exe