svcutil - 生成具有特定版本的代码

时间:2014-03-20 14:33:54

标签: c# wcf svcutil.exe

我使用其他人的一些应用程序。现在,是时候更新一些服务和功能了。我添加到我的旧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 带代码的旧文件有Runtime Version: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客户端基础架构)生成?

1 个答案:

答案 0 :(得分:2)

经过一番搜索和调查后,我终于实现了我所需要的。这不是我的问题的直接回应,但它解决了我的问题。

我使用程序示例在此msdn站点中生成来自wsdl的代码。 生成的代码也有新的运行时版本(4.0.30319.18444 .NET 4.0),但是类扩展了System.Web.Services.Protocols.SoapHttpClientProtocol类,它可以很好地处理旧代码。

所以最终所有关于WCF技术的知识都是:asmx,ServiceDescriptionInport,svc,ServiceContractGenerator。

(如果这个问题没用,2周后我会删除它)