0

我有一个基于 .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;
        }                       
    }
4

1 回答 1

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
于 2013-06-10T19:54:25.133 回答