现在的位置: 首页 > 综合 > 正文

【分享】.net1.1调用webservice返回二维数组时提示“XML 文档(1, 378)中有错误”的解决方法!

2012年01月06日 ⁄ 综合 ⁄ 共 14841字 ⁄ 字号 评论关闭

  最近,由于业务需求,项目需要调用其他单位提供的接口来同步数据,对方提供的接口是java开发的WebService,返回的数据是二维数组。我们的项目是05年开发的.net1.1版本,在调用对方接口获取返回的二维数组数据时,提示“XML 文档(1, 378)中有错误”。经测试无论在哪个框架下添加引用对方服务时,生成的CS文件返回的都是一维数组,而并非二维数组,在.net2.0以上版本,强制性修改CS文件的方法来返回二维数组可以得到对方的数据,但在.net1.1版本,强制性修改CS文件的方法来返回二维数组时就提示“XML 文档(1, 378)中有错误”。上google搜索该问题,部分网友说.net1.1调用WebService不支持二维数组,不知道是否真是这样,如果支持二维数组,请问各位园友这个问题如何解决?期待园友的解答,谢谢!
  一、在.net1.1、.net2.0、.net3.0的测试情况具体如下:
 
 注意:修改后的CS文件主要对方法findRegisterQuota的返回类型作了修改,默认为一维数组,强制性修改为二维数组了。

  1.net2.0环境  

  (1)调用对方服务生成的原始CS文件

代码

//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行库版本:2.0.50727.3603
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------

// 
// 此源代码是由 Microsoft.VSDesigner 2.0.50727.3603 版自动生成。
// 
#pragma warning disable 1591

namespace WebApplication2.WebReference {
    
using System.Diagnostics;
    
using System.Web.Services;
    
using System.ComponentModel;
    
using System.Web.Services.Protocols;
    
using System;
    
using System.Xml.Serialization;
    
    
    
/// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services""2.0.50727.3053")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute(
"code")]
    [System.Web.Services.WebServiceBindingAttribute(Name
="RegisterServiceSoapBinding", Namespace="http://register.webservice.hnisi.com.cn")]
    
public partial class RegisterService : System.Web.Services.Protocols.SoapHttpClientProtocol {
        
        
private System.Threading.SendOrPostCallback registerOperationCompleted;
        
        
private System.Threading.SendOrPostCallback findRegisterQuotaOperationCompleted;
        
        
private bool useDefaultCredentialsSetExplicitly;
        
        
/// <remarks/>
        public RegisterService() {
            
this.Url = global::WebApplication2.Properties.Settings.Default.WebApplication2_WebReference_RegisterService;
            
if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
                
this.UseDefaultCredentials = true;
                
this.useDefaultCredentialsSetExplicitly = false;
            }
            
else {
                
this.useDefaultCredentialsSetExplicitly = true;
            }
        }
        
        
public new string Url {
            
get {
                
return base.Url;
            }
            
set {
                
if ((((this.IsLocalFileSystemWebService(base.Url) == true
                            
&& (this.useDefaultCredentialsSetExplicitly == false)) 
                            
&& (this.IsLocalFileSystemWebService(value) == false))) {
                    
base.UseDefaultCredentials = false;
                }
                
base.Url = value;
            }
        }
        
        
public new bool UseDefaultCredentials {
            
get {
                
return base.UseDefaultCredentials;
            }
            
set {
                
base.UseDefaultCredentials = value;
                
this.useDefaultCredentialsSetExplicitly = true;
            }
        }
        
        
/// <remarks/>
        public event registerCompletedEventHandler registerCompleted;
        
        
/// <remarks/>
        public event findRegisterQuotaCompletedEventHandler findRegisterQuotaCompleted;
        
        
/// <remarks/>
        [System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="http://register.webservice.hnisi.com.cn", ResponseNamespace="http://register.webservice.hnisi.com.cn")]
        [
return: System.Xml.Serialization.SoapElementAttribute("RegisterReturn")]
        
public string[] register(string userID, string password, string[] citizenInfos) {
            
object[] results = this.Invoke("register"new object[] {
                        userID,
                        password,
                        citizenInfos});
            
return ((string[])(results[0]));
        }
        
        
/// <remarks/>
        public void registerAsync(string userID, string password, string[] citizenInfos) {
            
this.registerAsync(userID, password, citizenInfos, null);
        }
        
        
/// <remarks/>
        public void registerAsync(string userID, string password, string[] citizenInfos, object userState) {
            
if ((this.registerOperationCompleted == null)) {
                
this.registerOperationCompleted = new System.Threading.SendOrPostCallback(this.OnregisterOperationCompleted);
            }
            
this.InvokeAsync("register"new object[] {
                        userID,
                        password,
                        citizenInfos}, 
this.registerOperationCompleted, userState);
        }
        
        
private void OnregisterOperationCompleted(object arg) {
            
if ((this.registerCompleted != null)) {
                System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs 
= ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
                
this.registerCompleted(thisnew registerCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
            }
        }
        
        
/// <remarks/>
        [System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="http://register.webservice.hnisi.com.cn", ResponseNamespace="http://register.webservice.hnisi.com.cn")]
        [
return: System.Xml.Serialization.SoapElementAttribute("FindRegisterQuotaReturn")]
        
public string[]findRegisterQuota(string userID, string password, string annual, string departmentCode) {
            
object[] results = this.Invoke("findRegisterQuota"new object[] {
                        userID,
                        password,
                        annual,
                        departmentCode});
            
return ((string[])(results[0]));
        }
        
        
/// <remarks/>
        public void findRegisterQuotaAsync(string userID, string password, string annual, string departmentCode) {
            
this.findRegisterQuotaAsync(userID, password, annual, departmentCode, null);
        }
        
        
/// <remarks/>
        public void findRegisterQuotaAsync(string userID, string password, string annual, string departmentCode, object userState) {
            
if ((this.findRegisterQuotaOperationCompleted == null)) {
                
this.findRegisterQuotaOperationCompleted = new System.Threading.SendOrPostCallback(this.OnfindRegisterQuotaOperationCompleted);
            }
            
this.InvokeAsync("findRegisterQuota"new object[] {
                        userID,
                        password,
                        annual,
                        departmentCode}, 
this.findRegisterQuotaOperationCompleted, userState);
        }
        
        
private void OnfindRegisterQuotaOperationCompleted(object arg) {
            
if ((this.findRegisterQuotaCompleted != null)) {
                System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs 
= ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
                
this.findRegisterQuotaCompleted(thisnew findRegisterQuotaCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
            }
        }
        
        
/// <remarks/>
        public new void CancelAsync(object userState) {
            
base.CancelAsync(userState);
        }
        
        
private bool IsLocalFileSystemWebService(string url) {
            
if (((url == null
                        
|| (url == string.Empty))) {
                
return false;
            }
            System.Uri wsUri 
= new System.Uri(url);
            
if (((wsUri.Port >= 1024
                        
&& (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) {
                
return true;
            }
            
return false;
        }
    }
    
    
/// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services""2.0.50727.3053")]
    
public delegate void registerCompletedEventHandler(object sender, registerCompletedEventArgs e);
    
    
/// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services""2.0.50727.3053")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute(
"code")]
    
public partial class registerCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
        
        
private object[] results;
        
        
internal registerCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
                
base(exception, cancelled, userState) {
            
this.results = results;
        }
        
        
/// <remarks/>
        public string[] Result {
            
get {
                
this.RaiseExceptionIfNecessary();
                
return ((string[])(this.results[0]));
            }
        }
    }
    
    
/// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services""2.0.50727.3053")]
    
public delegate void findRegisterQuotaCompletedEventHandler(object sender, findRegisterQuotaCompletedEventArgs e);
    
    
/// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services""2.0.50727.3053")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute(
"code")]
    
public partial class findRegisterQuotaCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
        
        
private object[] results;
        
        
internal findRegisterQuotaCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
                
base(exception, cancelled, userState) {
            
this.results = results;
        }
        
        
/// <remarks/>
        public string[] Result {
            
get {
                
this.RaiseExceptionIfNecessary();
                
return ((string[])(this.results[0]));
            }
        }
    }
}

#pragma warning restore 1591

 

  (2)调用对方服务修改后的CS文件 

代码

//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行库版本:2.0.50727.3603
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------

// 
// 此源代码是由 Microsoft.VSDesigner 2.0.50727.3603 版自动生成。
// 
#pragma warning disable 1591

namespace WebApplication2.WebReference {
    
using System.Diagnostics;
    
using System.Web.Services;
    
using System.ComponentModel;
    
using System.Web.Services.Protocols;
    
using System;
    
using System.Xml.Serialization;
    
    
    
/// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services""2.0.50727.3053")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute(
"code")]
    [System.Web.Services.WebServiceBindingAttribute(Name
="RegisterServiceSoapBinding", Namespace="http://register.webservice.hnisi.com.cn")]
    
public partial class RegisterService : System.Web.Services.Protocols.SoapHttpClientProtocol {
        
        
private System.Threading.SendOrPostCallback registerOperationCompleted;
        
        
private System.Threading.SendOrPostCallback findRegisterQuotaOperationCompleted;
        
        
private bool useDefaultCredentialsSetExplicitly;
        
        
/// <remarks/>
        public RegisterService() {
            
this.Url = global::WebApplication2.Properties.Settings.Default.WebApplication2_WebReference_RegisterService;
            
if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
                
this.UseDefaultCredentials = true;
                
this.useDefaultCredentialsSetExplicitly = false;
            }
            
else {
                
this.useDefaultCredentialsSetExplicitly = true;
            }
        }
        
        
public new string Url {
            
get {
                
return base.Url;
            }
            
set {
                
if ((((this.IsLocalFileSystemWebService(base.Url) == true
                            
&& (this.useDefaultCredentialsSetExplicitly == false)) 
                            
&& (this.IsLocalFileSystemWebService(value) == false))) {
                    
base.UseDefaultCredentials = false;
                }
                
base.Url = value;
            }
        }
        
        
public new bool UseDefaultCredentials {
            
get {
                
return base.UseDefaultCredentials;
            }
            
set {
                
base.UseDefaultCredentials = value;
                
this.useDefaultCredentialsSetExplicitly = true;
            }
        }
        
        
/// <remarks/>
        public event registerCompletedEventHandler registerCompleted;
        
        
/// <remarks/>
        public event findRegisterQuotaCompletedEventHandler findRegisterQuotaCompleted;
        
        
/// <remarks/>
        [System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="http://register.webservice.hnisi.com.cn", ResponseNamespace="http://register.webservice.hnisi.com.cn")]
        [
return: System.Xml.Serialization.SoapElementAttribute("RegisterReturn")]
        
public string[] register(string userID, string password, string[] citizenInfos) {
            
object[] results = this.Invoke("register"new object[] {
                        userID,
                        password,
                        citizenInfos});
            
return ((string[])(results[0]));
        }
        
        
/// <remarks/>
        public void registerAsync(string userID, string password, string[] citizenInfos) {
            
this.registerAsync(userID, password, citizenInfos, null);
        }
        
        
/// <remarks/>
        public void registerAsync(string userID, string password, string[] citizenInfos, object userState) {
            
if ((this.registerOperationCompleted == null)) {
                
this.registerOperationCompleted = new System.Threading.SendOrPostCallback(this.OnregisterOperationCompleted);
            }
            
this.InvokeAsync("register"new object[] {
                        userID,
                        password,
                        citizenInfos}, 
this.registerOperationCompleted, userState);
        }
        
        
private void OnregisterOperationCompleted(object arg) {
            
if ((this.registerCompleted != null)) {
                System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs 
= ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
                
this.registerCompleted(thisnew registerCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
            }
        }
        
        
/// <remarks/>
        [System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="http://register.webservice.hnisi.com.cn", ResponseNamespace="http://register.webservice.hnisi.com.cn")]
        [
return: System.Xml.Serialization.SoapElementAttribute("FindRegi

抱歉!评论已关闭.