我有一个基于 .net framework 3.5 的 asmx Web 服务。我将它部署在服务器中,并将应用程序池的框架版本设置为 4.0(集成)。进行更改后,如果我尝试使用肥皂客户端以 xml 格式向服务发送请求,如果我将应用程序池的运行时版本更改为 2.0,则会收到错误“数据在根行 1 位置 1 无效”很好。到目前为止,我在 2003 年的服务器上运行良好。有人可以让我知道这可能是什么问题吗?
我能够将问题缩小到一个点。我拥有的服务是如前所述的 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;
}
}