我有一个基于.net framework 3.5的asmx web服务。我将它部署在服务器中,并将应用程序池的框架版本设置为4.0(集成)。如果我尝试使用soap客户端以xml格式向服务发送请求,那么在进行更改后,如果我将应用程序池的运行时版本更改为2.0,则会收到错误“数据在根行1位置1处无效”很好。我在2003年的服务器上工作正常。有人可以告诉我这个问题可能是什么?
我能够将问题缩小到一点。我所拥有的服务是如前所述的asmx服务,我发现当将应用程序池更改为4.0并且当我通过soap客户端向服务发送xml请求时,我收到错误数据在根级别是在while循环中无效,这是在使用xsd验证请求时给出的。请找到以下方法。错误在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 :(得分: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