2013-06-03 68 views
0

我有一个基于.net framework 3.5的asmx web服务。我将它部署在服务器中,并将应用程序池的框架版本设置为4.0(集成)。如果我尝试使用soap客户端以xml格式向服务发送请求,则进行更改后,如果我将应用程序池的运行时版本更改为2.0,则会出现错误“数据在根线1位置1无效”很好。我在2003年的服务器上工作得很好,直到现在。请问有人可以告诉我这个问题会是什么?在.net framework 4.0上部署asmx服务时抛出错误

我能够将问题缩小到一个点。我的服务是前面说过的asmx服务,我发现当将应用程序池更改为4.0时,以及当我通过soap客户端向服务发送xml请求时,出现错误根目录下的数据是在使用xsd验证请求时给出的while循环处无效。请找到下面的方法。该错误恰好在while循环中抛出。不知道错误是什么。在调用此方法之前,序列化请求可以在下面找到该代码。不确定在序列化期间或验证过程中是否发生错误,我的意思是可能是请求未正确序列化,所以验证失败,但不确定。

//系列化

 XmlSerializer serializer = new XmlSerializer(MyRequest.GetType()); //MyRequest is the input object. 
     MemoryStream memoryStream = new MemoryStream(); 
     UnicodeEncoding uniEncoding = new UnicodeEncoding(); 
     TextWriter textWriter = new StreamWriter(memoryStream, Encoding.Unicode); 
     serializer.Serialize(textWriter, MyRequest); 
     int count = (int)memoryStream.Length;    
     byte[] requestArray = new byte[count];   
     memoryStream.Seek(0, SeekOrigin.Begin); 
     memoryStream.Read(requestArray, 0, count); 
     string stringXML= uniEncoding.GetString(requestArray).Trim(); 

    public bool ValidateXML(string stringXML, Uri schemaURI) 
    { 
     XmlSchemaSet sc = null; 
     XmlReaderSettings settings = null; 
     XmlReader reader = null; 
     StringReader txtReader = null; 

     try 
     { 
      // Create the XmlSchemaSet class. 
      sc = new XmlSchemaSet(); 

      sc.Add(null, schemaURI.ToString()); 

      // Set the validation settings. 
      settings = new XmlReaderSettings(); 
      settings.ValidationType = ValidationType.Schema; 
      settings.Schemas = sc; 

      txtReader = new StringReader(stringXML);   
      // Create the XmlReader object. 
      reader = XmlReader.Create(txtReader, settings);                
      while (reader.Read()) 
      {    
      } 
      reader.Close(); 
      return true; 
     }      
    } 
+0

您是否尝试过使用.NET 4.0构建它? –

+0

是的,尝试过,但仍然是相同的错误 – SonuShaik

+0

这个问题的一些更多细节如下。 – SonuShaik

回答

0

看起来问题不完全与框架,它可能是你使用的序列化是造成它的类。 如下所示替换整个序列化代码。这个难题解决了这个问题。

XmlSerializer xsSubmit = new XmlSerializer(typeof(MyObject)); 
var subReq = new MyObject(); 
StringWriter sww = new StringWriter(); 
XmlWriter writer = XmlWriter.Create(sww); 
xsSubmit.Serialize(writer, subReq); 
var xml = sww.ToString(); // Your xml 
+0

感谢您的回答,这解决了这个问题。 – SonuShaik

相关问题