在 C# SOAP 请求中使用 WSDL 时出现 System.NullReferenceException [英] System.NullReferenceException when using WSDL in C# SOAP Request
问题描述
另一个类似但无法解决的问题尝试了在同一篇文章中适用于上一个问题的答案,即适用于数组.在这里是查找和 iv 尝试了以下但仍然无法正常工作.我也试过
Another Similar But cant figure out Problem Tried the answer which worked for previous question in this same post, Which was for Arrays. Over here it is lookups and iv tried the below but its still not working. Iv also tried
createCustomerRequest.CustomerDetails.Title[0].Code[0] = cloneTitleCode[0];
所有的 [0] iv 都把它们调过来,也把它们取下来,尝试了所有的组合仍然不起作用.
All the [0] iv switched them around and took them off too and tried all the combinations still doesnt work.
//Security settings to match server using this line: -
Dsoapui.https.protocols=SSLv3,TLSv1.2 ...
BasicHttpsBinding httpsBinding = new
BasicHttpsBinding(BasicHttpsSecurityMode.Transport);
//Using the security settings to create the client which will let us send/recieve the requests...
CustomerServiceClient soapClient = new CustomerServiceClient("BasicHttpsBinding_ICustomerService");
//Set credentials for the client...
soapClient.ClientCredentials.UserName.UserName = username;
soapClient.ClientCredentials.UserName.Password = password;
//Create instances of requesting and recieving data from the server for customerDetails...
CreateCustomer createCustomer = new CreateCustomer();
CreateCustomerRequest createCustomerRequest = new CreateCustomerRequest();
CreateCustomerResponse createCustomerResponse = new CreateCustomerResponse();
//Set customer details request (so whatever will be included in the request to recieve the info)...
createCustomerRequest.UserName = username;
createCustomerRequest.Password = password;
createCustomerRequest.SystemToken = "2fa192c3-1215-41f9-be71-2ba6e279494e";
//Get current time to generate unique customer number...
string currentTime = DateTime.Now.ToLongTimeString();
string cleanTime = Regex.Replace(currentTime, "[^A-Za-z0-9 ]", "");
//For WSDL arrays create the array and instance then use it like below...
createCustomerRequest.CustomerDetails.Title = new CustomerServiceWSDL.LookupItem();
createCustomerRequest.CustomerDetails = new CreateCustomer();
createCustomerRequest.CustomerDetails.CustomerNumber = "001" + cleanTime;
createCustomerRequest.CustomerDetails.FirstName = cloneFirstName;
createCustomerRequest.CustomerDetails.Surname = cloneSurName;
createCustomerRequest.CustomerDetails.Title.Code = cloneTitleCode;
有关我在此代码中使用的所有内容的 WSDL 参考:
WSDL Reference for everything im playing with in this code:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="CreateCustomer", Namespace= + WEBAPI)]
[System.SerializableAttribute()]
public partial class CreateCustomer : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.LookupItem BranchField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.LookupItem BusinessSourceField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.ContactInformation ContactDetailsField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string CreatedByField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Nullable<System.DateTime> CreationDateField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Nullable<decimal> CreditLimitField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.Residence CurrentAddressField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string CustomerNumberField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.DateTime DateOfBirthField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.LookupItem EmploymentStatusField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string FirstNameField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.Gender GenderField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string IdNumberField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string InitialsField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.LookupItem MaritalStatusField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string NationalInsuranceNumberField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.LookupItem NationalityField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private bool NoMailMarketingField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Nullable<int> NoOfChildrenField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private bool NoThirdPartyMarketingField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.LookupItem OccupationField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string PreviousNameField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Nullable<System.DateTime> ReviewDateField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.LookupItem StatusField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string SurnameField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Account_Status.CustomerServiceWSDL.LookupItem TitleField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.LookupItem Branch {
get {
return this.BranchField;
}
set {
if ((object.ReferenceEquals(this.BranchField, value) != true)) {
this.BranchField = value;
this.RaisePropertyChanged("Branch");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.LookupItem BusinessSource {
get {
return this.BusinessSourceField;
}
set {
if ((object.ReferenceEquals(this.BusinessSourceField, value) != true)) {
this.BusinessSourceField = value;
this.RaisePropertyChanged("BusinessSource");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.ContactInformation ContactDetails {
get {
return this.ContactDetailsField;
}
set {
if ((object.ReferenceEquals(this.ContactDetailsField, value) != true)) {
this.ContactDetailsField = value;
this.RaisePropertyChanged("ContactDetails");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string CreatedBy {
get {
return this.CreatedByField;
}
set {
if ((object.ReferenceEquals(this.CreatedByField, value) != true)) {
this.CreatedByField = value;
this.RaisePropertyChanged("CreatedBy");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Nullable<System.DateTime> CreationDate {
get {
return this.CreationDateField;
}
set {
if ((this.CreationDateField.Equals(value) != true)) {
this.CreationDateField = value;
this.RaisePropertyChanged("CreationDate");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Nullable<decimal> CreditLimit {
get {
return this.CreditLimitField;
}
set {
if ((this.CreditLimitField.Equals(value) != true)) {
this.CreditLimitField = value;
this.RaisePropertyChanged("CreditLimit");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.Residence CurrentAddress {
get {
return this.CurrentAddressField;
}
set {
if ((object.ReferenceEquals(this.CurrentAddressField, value) != true)) {
this.CurrentAddressField = value;
this.RaisePropertyChanged("CurrentAddress");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string CustomerNumber {
get {
return this.CustomerNumberField;
}
set {
if ((object.ReferenceEquals(this.CustomerNumberField, value) != true)) {
this.CustomerNumberField = value;
this.RaisePropertyChanged("CustomerNumber");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.DateTime DateOfBirth {
get {
return this.DateOfBirthField;
}
set {
if ((this.DateOfBirthField.Equals(value) != true)) {
this.DateOfBirthField = value;
this.RaisePropertyChanged("DateOfBirth");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.LookupItem EmploymentStatus {
get {
return this.EmploymentStatusField;
}
set {
if ((object.ReferenceEquals(this.EmploymentStatusField, value) != true)) {
this.EmploymentStatusField = value;
this.RaisePropertyChanged("EmploymentStatus");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string FirstName {
get {
return this.FirstNameField;
}
set {
if ((object.ReferenceEquals(this.FirstNameField, value) != true)) {
this.FirstNameField = value;
this.RaisePropertyChanged("FirstName");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string Surname
{
get
{
return this.SurnameField;
}
set
{
if ((object.ReferenceEquals(this.SurnameField, value) != true))
{
this.SurnameField = value;
this.RaisePropertyChanged("Surname");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.Gender Gender {
get {
return this.GenderField;
}
set {
if ((this.GenderField.Equals(value) != true)) {
this.GenderField = value;
this.RaisePropertyChanged("Gender");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string IdNumber {
get {
return this.IdNumberField;
}
set {
if ((object.ReferenceEquals(this.IdNumberField, value) != true)) {
this.IdNumberField = value;
this.RaisePropertyChanged("IdNumber");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string Initials {
get {
return this.InitialsField;
}
set {
if ((object.ReferenceEquals(this.InitialsField, value) != true)) {
this.InitialsField = value;
this.RaisePropertyChanged("Initials");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.LookupItem MaritalStatus {
get {
return this.MaritalStatusField;
}
set {
if ((object.ReferenceEquals(this.MaritalStatusField, value) != true)) {
this.MaritalStatusField = value;
this.RaisePropertyChanged("MaritalStatus");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string NationalInsuranceNumber {
get {
return this.NationalInsuranceNumberField;
}
set {
if ((object.ReferenceEquals(this.NationalInsuranceNumberField, value) != true)) {
this.NationalInsuranceNumberField = value;
this.RaisePropertyChanged("NationalInsuranceNumber");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.LookupItem Nationality {
get {
return this.NationalityField;
}
set {
if ((object.ReferenceEquals(this.NationalityField, value) != true)) {
this.NationalityField = value;
this.RaisePropertyChanged("Nationality");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public bool NoMailMarketing {
get {
return this.NoMailMarketingField;
}
set {
if ((this.NoMailMarketingField.Equals(value) != true)) {
this.NoMailMarketingField = value;
this.RaisePropertyChanged("NoMailMarketing");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Nullable<int> NoOfChildren {
get {
return this.NoOfChildrenField;
}
set {
if ((this.NoOfChildrenField.Equals(value) != true)) {
this.NoOfChildrenField = value;
this.RaisePropertyChanged("NoOfChildren");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public bool NoThirdPartyMarketing {
get {
return this.NoThirdPartyMarketingField;
}
set {
if ((this.NoThirdPartyMarketingField.Equals(value) != true)) {
this.NoThirdPartyMarketingField = value;
this.RaisePropertyChanged("NoThirdPartyMarketing");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.LookupItem Occupation {
get {
return this.OccupationField;
}
set {
if ((object.ReferenceEquals(this.OccupationField, value) != true)) {
this.OccupationField = value;
this.RaisePropertyChanged("Occupation");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string PreviousName {
get {
return this.PreviousNameField;
}
set {
if ((object.ReferenceEquals(this.PreviousNameField, value) != true)) {
this.PreviousNameField = value;
this.RaisePropertyChanged("PreviousName");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Nullable<System.DateTime> ReviewDate {
get {
return this.ReviewDateField;
}
set {
if ((this.ReviewDateField.Equals(value) != true)) {
this.ReviewDateField = value;
this.RaisePropertyChanged("ReviewDate");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.LookupItem Status {
get {
return this.StatusField;
}
set {
if ((object.ReferenceEquals(this.StatusField, value) != true)) {
this.StatusField = value;
this.RaisePropertyChanged("Status");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.CustomerServiceWSDL.LookupItem Title {
get {
return this.TitleField;
}
set {
if ((object.ReferenceEquals(this.TitleField, value) != true)) {
this.TitleField = value;
this.RaisePropertyChanged("Title");
}
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="LookupItem", Namespace= + APIWEB)]
[System.SerializableAttribute()]
public partial class LookupItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string CodeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string DisplayTextField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private bool IsActiveField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string Code {
get {
return this.CodeField;
}
set {
if ((object.ReferenceEquals(this.CodeField, value) != true)) {
this.CodeField = value;
this.RaisePropertyChanged("Code");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string DisplayText {
get {
return this.DisplayTextField;
}
set {
if ((object.ReferenceEquals(this.DisplayTextField, value) != true)) {
this.DisplayTextField = value;
this.RaisePropertyChanged("DisplayText");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public bool IsActive {
get {
return this.IsActiveField;
}
set {
if ((this.IsActiveField.Equals(value) != true)) {
this.IsActiveField = value;
this.RaisePropertyChanged("IsActive");
}
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
推荐答案
那是因为 purchaseOnHoldSetRequest.AdditionalDetail
是一个 Array
类型(主要来自您发布的代码)还没有初始化并尝试在索引 0
中设置一个项目,说 purchaseOnHoldSetRequest.AdditionalDetail[0].Description
这将必然抛出 NullRefException
That's cause purchaseOnHoldSetRequest.AdditionalDetail
is an Array
type (mostly, from your posted code) which you haven't initialized and trying to set an item in index 0
saying purchaseOnHoldSetRequest.AdditionalDetail[0].Description
which will bound to throw NullRefException
根据您的 WSDL,所述属性是 AdditionalDetails
类的数组,如下所示
Per your WSDL, the said property is array of AdditionalDetails
class as seen below
[System.Runtime.Serialization.DataMemberAttribute()]
public Account_Status.ServiceReference2.AdditionalDetail[] AdditionalDetail {
get {
return this.AdditionalDetailField;
}
set {
if ((object.ReferenceEquals(this.AdditionalDetailField, value) != true)) {
this.AdditionalDetailField = value;
this.RaisePropertyChanged("AdditionalDetail");
}
}
}
因此需要先初始化
purchaseOnHoldSetRequest.UserName = "username";
purchaseOnHoldSetRequest.Password = "password";
purchaseOnHoldSetRequest.SystemToken = "systemtoken";
purchaseOnHoldSetRequest.AgreementReference = customerAgreementNumberComboBox.Text;
purchaseOnHoldSetRequest.AdditionalDetail = new AdditionalDetail[3]; // here
然后像您一样访问它
purchaseOnHoldSetRequest.AdditionalDetail[0] = new AdditionalDetail();
purchaseOnHoldSetRequest.AdditionalDetail[0].Description = "1";
这篇关于在 C# SOAP 请求中使用 WSDL 时出现 System.NullReferenceException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!