C# 代理类定义缺少指定的属性
我正在引用一个外部SOAP服务(我指的是由另一个开发团队创建的外部SOAP服务)作为.NET服务层中的服务引用 我以前多次执行过这种类型的操作,通常生成的代理将包含一个带有数据字段的类结构,然后指定C# 代理类定义缺少指定的属性,c#,xml,web-services,soap,xsd,C#,Xml,Web Services,Soap,Xsd,我正在引用一个外部SOAP服务(我指的是由另一个开发团队创建的外部SOAP服务)作为.NET服务层中的服务引用 我以前多次执行过这种类型的操作,通常生成的代理将包含一个带有数据字段的类结构,然后指定FieldSpecified属性以允许选择性填充这些字段 这种方法工作得很好,因为它基本上是将信息传递回另一个应用程序,以更新其数据库中的某些字段 下面是过去生成的具有所需行为的示例类: [System.CodeDom.Compiler.GeneratedCodeAttribute("System.X
FieldSpecified
属性以允许选择性填充这些字段
这种方法工作得很好,因为它基本上是将信息传递回另一个应用程序,以更新其数据库中的某些字段
下面是过去生成的具有所需行为的示例类:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.sampleproxyclass.com/updatecustomer")]
public partial class Customer : object, System.ComponentModel.INotifyPropertyChanged {
private string CustomerName;
private System.Nullable<System.DateTime> dateOfBirthField;
private bool dateOfBirthFieldSpecified;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order=1)]
public string CustomerName{
get {
return this.CustomerName;
}
set {
this.CustomerName= value;
this.RaisePropertyChanged("CustomerName");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(DataType="date", IsNullable=true, Order=4)]
public System.Nullable<System.DateTime> dateOfBirth{
get {
return this.dateOfBirthField;
}
set {
this.dateOfBirthField= value;
this.RaisePropertyChanged("dateofBirth");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool dateOfBirthFieldSpecified{
get {
return this.dateOfBirthFieldSpecified;
}
set {
this.dateOfBirthFieldSpecified= value;
this.RaisePropertyChanged("dateOfBirthFieldSpecified");
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Xml”,“4.0.30319.17929”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true,命名空间=”http://www.sampleproxyclass.com/updatecustomer")]
公共部分类客户:对象,System.ComponentModel.INotifyPropertyChanged{
私有字符串客户名称;
私有系统。可为空的BirthField日期;
指定的BirthField的私有布尔日期;
///
[System.Xml.Serialization.XmlElementAttribute(顺序=1)]
公共字符串客户名称{
得到{
退回这个。客户名称;
}
设置{
this.CustomerName=值;
本.RaisePropertyChanged(“客户名称”);
}
}
///
[System.Xml.Serialization.xmlementAttribute(DataType=“date”,IsNullable=true,Order=4)]
公共系统。可为空的出生日期{
得到{
返回此.dateOfBirthField;
}
设置{
此.dateOfBirthField=值;
本次募捐财产变更(“出生日期”);
}
}
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
指定了公共bool出生日期字段{
得到{
返回指定的此.DateOfBirthField;
}
设置{
指定的.dateOfBirthField=值;
此.RaisePropertyChanged(“指定的出生日期字段”);
}
}
}
由于某些原因,此最新服务根本不会生成指定的字段属性,这给我们带来了一个主要的集成难题。我无法控制XSD规范或创建,但我一直在尝试帮助负责XSD的团队更改定义,以便它按照我的示例中的上述方式生成代理
我认为关键是在定义中添加minOccurs=“0”
,但这并没有奏效。我还让他们尝试nillable=“true”
,但同样没有乐趣
所以我的问题是,当服务引用添加到.NET项目中时,是什么XSD配置驱动了字段指定的
属性的创建
我正在使用VS2013,框架4.5.1。只是为了回答您的问题;根据MSDN,这种语法应该为您提供可为空的类型
<xs:element minOccurs="1" maxOccurs="1" name="NameNullable" nillable="true" type="xs:string" />
不幸的是,这从来都不是直截了当的。在过去,我编写了自己的工具来更改VS生成的代码。你也可能需要做一些类似的事情
我只是在stackoverflow上搜索了类似的问题,我发现了。
一些人评论说,他们编写了自己的工具来处理此类问题。似乎没有简单的出路。只是回答你的问题;根据MSDN,这种语法应该为您提供可为空的类型
<xs:element minOccurs="1" maxOccurs="1" name="NameNullable" nillable="true" type="xs:string" />
不幸的是,这从来都不是直截了当的。在过去,我编写了自己的工具来更改VS生成的代码。你也可能需要做一些类似的事情
我只是在stackoverflow上搜索了类似的问题,我发现了。
一些人评论说,他们编写了自己的工具来处理此类问题。似乎没有简单的解决办法。您使用什么来生成这些类?@KosalaW只是标准的VS IDE生成器-通过向我的项目添加新的服务引用。我在过去遇到过这种情况。就我记忆所及,这就是我所做的。我让他们把xsd发给我。然后我使用XSD2代码生成我的引用类。使用这些引用,我托管了自己的wcf服务。然后我使用我的wcf服务创建了一个客户端。我多次摆弄xsd,直到它给了我想要的客户端。你用什么来生成这些类?@KosalaW只是标准的VS IDE生成器-通过向我的项目添加一个新的服务引用。我在过去遇到过这种情况。就我记忆所及,这就是我所做的。我让他们把xsd发给我。然后我使用XSD2代码生成我的引用类。使用这些引用,我托管了自己的wcf服务。然后我使用我的wcf服务创建了一个客户端。我多次摆弄xsd,直到它给了我想要的客户端。感谢信息,我们仍在处理此问题,因此我会在我有一些信息时发布更多信息。感谢信息,我们仍在处理此问题,因此我会在有一些信息时发布更多信息。