部署在.net framework 4.0上时asmx服务抛出错误

时间:2013-06-03 21:12:57

标签: service asmx

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

1 个答案:

答案 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