svcutil.exe 相关问题

ServiceModel元数据实用工具(SVCUTIL.EXE)用于从元数据文档生成服务模型代码,从服务模型代码生成元数据文档。

使用 svcutil 将序列转换为通用列表

我正在尝试使用 svcutil 自动生成一些代码。我在 xsd 中有以下内容: 我正在尝试使用 svcutil 自动生成一些代码。我在 xsd 中有以下内容: <xs:complexType name="ForsikringstilfelleDetalj"> <xs:sequence> <xs:element name="detaljID" type="xs:string" minOccurs="0" maxOccurs="1"/> 然后运行以下命令: svcutil xx.wsdl yy.xsd /ct:System.Collections.Generic.List`1 然后我得到以下 C# 代码: public ForsikringstilfelleDetalj[] forsikringstilfelle 我想要的是: public List<ForsikringstilfelleDetalj> forsikringstilfelle 根据网上的信息, /ct 选项应该告诉 svcutil 使用通用列表进行集合。谁能看到我做错了什么吗? 要将元数据(包括 xsd 方案)下载到当前目录,请使用: svcutil /t:metadata http://.../.../service?WSDL 要生成客户端代码,请使用: svcutil *.wsdl *.xsd /language:C# /ct:System.Collections.Generic.List`1 注意:*.wsdl 和 *.xsd,因为可能有很多服务定义和方案。 要一步生成客户端代码,请使用: svcutil http://.../.../service?WSDL /ct:System.Collections.Generic.List`1 我回答这个问题可能有点晚了,但我会把它留在这里,以防其他人遇到同样的问题。 SvcUtil 不生成基于泛型的类的原因是因为它仅受 DataContract Serializer 支持,而不受 XML Serializer 支持。 DataContract Serializer 可能不支持您拥有的 WSDL/XSD。像拥有属性(xsd/xml 而不是“DataContractAttribute”)这样简单的事情将默认使用 XMLSerializer,因为 DataContracts 不支持属性。 请阅读以下内容: “此外,用于引用类型的 /r 和 /ct 开关用于 生成数据合同。使用时这些开关不起作用 XmlSerializer。” https://msdn.microsoft.com/en-us/library/aa347733(v=vs.110).aspx 我无法弄清楚为什么 /ct 开关在我的情况下无法正常工作。希望他们尽快修复它;同时,我将以下 powershell 命令添加到批处理文件中,以用列表替换生成的数组: powershell -Command "(gc ServiceRef.cs) -replace 'ForsikringstilfelleDetalj\[\]', 'System.Collections.Generic.List<ForsikringstilfelleDetalj>' | Out-File ServiceRef.cs" 我知道这个问题有点老了,但我遇到了同样的问题并解决如下: 首先,NugGet 上提供了一个新的 svcutil:dotnet-svcutil,它可与较新的 .net 和核心框架配合使用。 其次,您需要指定要使用的集合类型,如之前的海报所示。但是,有两个重要问题需要考虑: 指定包含您要使用的集合类型的库引用。这是通过 --reference 标志完成的。就我而言,我使用:--reference System.Collections 使用命名空间正确指定集合。请记住,您需要正确转义特殊字符。就我而言,我使用:--collectionType "System.Collections.Generic.List``1"。请注意 List 和 1 之间的 2 个反勾号。 所以对我来说整个命令行命令看起来像这样: dotnet-svcutil https://<your service url>.svc?wsdl --noLogo --reference System.Collections --collectionType "System.Collections.Generic.List``1" --outputDir proxy --internal --namespace *,<your name space for the generated proxy class> --outputFile <your proxy class name>.cs 仅当返回类型为 List 或泛型类时,svcutil xx.wsdl yy.xsd /ct:System.Collections.Generic.List 才有效。检查方法的返回类型以查看所有方法是否都是通用的。

回答 5 投票 0

组织升级后 crmsvcutil 中出现 SQL 错误

上周CRM组织从CRM 2011升级到CRM 9.1。我们尝试使用 crmsvc util 生成早期绑定代码,但收到 SQL 错误。 当 crmsvcutils 在 2011 组织上运行时,...

回答 1 投票 0

如何使用 svcutil 从使用限制来隐藏元素的 Web 服务生成 C# WCF 代理?

我正在创建一个或多或少不受我控制的 Web 服务客户端。以下是该架构的简化示例: 我正在创建一个或多或少不受我控制的 Web 服务客户端。这是该架构的简化示例: <xs:complexType name="A"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="1" name="element1" type="xs:string" /> <xs:element minOccurs="0" maxOccurs="1" name="element2" type="xs:string" /> </xs:sequence> </xs:complexType> <xs:complexType name="B"> <xs:complexContent> <xs:restriction base="A"> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="element2" type="xs:string" /> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> 简而言之,我们有一个包含所有元素的对象 A。该服务有多种基于 A 的类型,但有限制,因此继承的类型通常小于基本类型 - 此处以类型 B 为例。 在架构查看器(例如 Visual Studio 2010、SoapUI 等中的查看器)中,这看起来符合预期。 A 有 2 个元素,B 只有 1 个(= 元素 2)。 通过使用 svcutil,我获得了类型 A 和 B 中的完整元素集,或者在使用选项时,我收到错误消息,例如: 错误:无法导入命名空间“http://tempuri.org/XMLSchema.xsd”中的类型“B”。通过限制派生的复杂类型 不支持。更改架构以便类型可以映射到数据协定类型,或者使用 ImportXmlType 或使用 不同的序列化器。 在继承类型中隐藏字段/属性并不是我喜欢的做法/道路,但如果我无法让提供者更改 WSDL,似乎我必须这样做。 是否有 svcutil 的替代方案可以正确处理此问题,或者我是否必须手动编码我的代理? 更新1 正如 John Saunders 所指出的,我没有显示 svcutil 建议的结果。这部分是为了保持帖子简短......但这里是: svcutil schema.xsd /importXmlTypes /datacontractonly 结果: [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] [System.Runtime.Serialization.DataContractAttribute(Name="A", Namespace="http://tempuri.org/XMLSchema.xsd")] public partial class A : object, System.Runtime.Serialization.IExtensibleDataObject { private System.Runtime.Serialization.ExtensionDataObject extensionDataField; private string element1Field; private string element2Field; public System.Runtime.Serialization.ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] public string element1 { get { return this.element1Field; } set { this.element1Field = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] public string element2 { get { return this.element2Field; } set { this.element2Field = value; } } } [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] [System.Xml.Serialization.XmlRootAttribute(IsNullable=false)] public partial class B : object, System.Xml.Serialization.IXmlSerializable { private System.Xml.XmlNode[] nodesField; private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("B", "http://tempuri.org/XMLSchema.xsd"); public System.Xml.XmlNode[] Nodes { get { return this.nodesField; } set { this.nodesField = value; } } public void ReadXml(System.Xml.XmlReader reader) { this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); } public void WriteXml(System.Xml.XmlWriter writer) { System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); } public System.Xml.Schema.XmlSchema GetSchema() { return null; } public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) { System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); return typeName; } } 在 Xml 级别上工作是不可取的,并且会迫使我们编写包装器。从一开始就手动编写代理代码会更容易。 svcutil schema.xsd /serializer:XmlSerializer /datacontractonly 给出以下错误,这就是我要求替代工具的原因。 svcutil schema.xsd /serializer:XmlSerializer /datacontractonly 错误:无法在命名空间“http://tempuri.org/XMLSchema.xsd”中键入“B” 被进口。不支持通过限制派生的复杂类型。 更改架构以便类型可以映射到数据契约 类型或使用 ImportXmlType 或使用不同的序列化程序。 如果您使用 /dataContractOnly 选项导入数据合约 类型并收到此错误消息,请考虑使用 xsd.exe 反而。 xsd.exe 生成的类型可以在 Windows 中使用 申请后的沟通基础 服务合同上的 XmlSerializerFormatAttribute 属性。 或者,考虑使用 /importXmlTypes 选项进行导入 这些类型作为 XML 类型与 DataContractFormatAttribute 一起使用 您的服务合同上的属性。 使用 xsd schema.xsd /c 给出继承 A 的类型 B,而不隐藏 element1: [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/XMLSchema.xsd")] [System.Xml.Serialization.XmlRootAttribute("request", Namespace="http://tempuri.org/XMLSchema.xsd", IsNullable=false)] public partial class B : A { } /// <remarks/> [System.Xml.Serialization.XmlIncludeAttribute(typeof(B))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/XMLSchema.xsd")] public partial class A { private string element1Field; private string element2Field; /// <remarks/> public string element1 { get { return this.element1Field; } set { this.element1Field = value; } } /// <remarks/> public string element2 { get { return this.element2Field; } set { this.element2Field = value; } } } 错误消息告诉您要么使用 /importXmlTypes 开关,要么更改为使用 XmlSerializer。来自帮助: /importXmlTypes - 配置数据协定 用于导入非数据协定类型的序列化程序 作为 IXmlSerialized 类型。 和 /serializer:XmlSerializer - 生成使用 XmlSerializer 用于序列化和 反序列化

回答 1 投票 0

不支持Svcutil配置文件.net core

我正在使用 svcutil 将 wcf 服务引入我的项目。 但我在尝试初始化soapClient时收到错误: ServiceSoapClient 客户端 = new ServiceSoapClient(); 这是错误: 配置

回答 3 投票 0

“找不到入口点”使用从 WSDL 文件生成的类时出错

我们正在尝试在 .NET Core Web 应用程序中使用第三方的 SOAP API。我们尝试了两种方法来获取从他们提供给我们的 WSDL 文件生成的类。 在 Visual Studio 中使用 WCF 使用 svcu...

回答 1 投票 0

有没有办法强制svcutil.exe忽略SSL证书问题?

我需要svcutil.exe为我生成一个代理类,但问题是Web服务只能通过HTTPS访问,而且SSL证书是自签名的。怎样才能强制svcutil.exe ...

回答 5 投票 4

用svcutil.exe生成错误的界面。

谁能帮我为以下OGC模式生成接口(c#)文件? Schema文件。下载Schema文件链接 我需要为schema zip文件中的Ordering wsdl创建web服务... ...

回答 2 投票 2

异常。System.ServiceModel.AddressAlreadyInUseException: 在IP端点0.0.0.0:808上已经有了一个监听器。

当我尝试ping net.tcp监听失败时,得到一个异常 C:\\Program Files (x86)\Microsoft SDKs\Windowsv10.0A/binNETFX 4.6.1 Tools>svcutil net.tcp:/localhostTNATAServices ...

回答 1 投票 0

WCF Web服务参考的自定义SOAP

我正在我的应用程序中使用自动生成的WCF Web服务参考,以将SOAP请求发送到远程主机。我遇到的问题与此处描述的问题类似:自定义消息格式...

回答 1 投票 0

Visual Studio 2019 C#WCF测试客户端不与svcutil.exe一起使用

我有一个WCF测试客户端应用程序,它最初是在Visual Studio 2017中创建的,可以正常工作,但是一旦我将Visual Studio升级到2019并重新运行该应用程序,我就会得到...

回答 1 投票 2

。net核心中如何将多个WSDL代理合并为一个类?

我有几个WSDL文件,它们在不同的服务协定中共享相同的类/类型集。我想在服务合同代理中重用这些类型。我发现的所有示例...

回答 1 投票 0

如何使用具有Tls 1.2的端点的Svcutil.exe获取元数据

有没有人知道如何使SvcUtil.exe连接到使用TLS 1.2的端点?我正在使用.Net Framework版本4.6.1。当我使用VS 2017连接时,我可以看到使用Fiddler的请求是...

回答 2 投票 6

svcutil wsdl错误:类型名称:在属性上:类型的“名称”:“System.CodeDom.CodeNamespace”不是与语言无关的有效类型名称

当我使用服务模型元数据工具时,我得到以下错误svcutil wsdl错误:类型名称:在属性上:类型的“名称”:“System.CodeDom.CodeNamespace”不是有效的语言-...

回答 1 投票 0

WCF客户端记录dotnet核心

我在Windows上使用asp.net核心,并且有一个由dotnet-svcutil生成的类的文件。我正在使用nlog进行日志记录。有没有办法可以记录所有原始请求和响应...

回答 2 投票 4

svcutil支持WS-Addressing和WS-Policy

我正在使用模式优先的Web服务开发方法,手工编写WSDL / XSD,然后将其提供给svcutil工具以生成.NET数据和服务契约。我试着介绍WS-Addressing ......

回答 1 投票 5

© www.soinside.com 2019 - 2024. All rights reserved.