12,162
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// overload .NET framework Invoke method
/// </summary>
/// <param name="methodName"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public new object[] Invoke(string methodName, object[] parameters)
{
WebResponse webResponse = null;
WebRequest webRequest = null;
object[] objArray;
try
{
webRequest = this.GetWebRequest(PI_BaseURI.GetValue(this, null) as Uri);
Trace.Assert(PI_BasePendingSyncRequest != null, "PropertyInfo can not be NULL");
PI_BasePendingSyncRequest.SetValue(this, webRequest, null);
SoapClientMessage message = InstanceInvokeBase("BeforeSerialize", webRequest, methodName, parameters) as SoapClientMessage;
Stream requestStream = webRequest.GetRequestStream();
try
{
Trace.Assert(MI_SetStream != null, "MethodInfo can not be NULL");
MI_SetStream.Invoke(message, new object[] { requestStream });
InstanceInvokeBase("Serialize", message);
}
finally
{
requestStream.Close();
}
webResponse = this.GetWebResponse(webRequest);
Stream responseStream = null;
try
{
responseStream = webResponse.GetResponseStream();
Stream responseStreamCopy = responseStream;
StreamReader sr = new StreamReader(responseStream);
string temp = string.Empty;
while (sr.Peek() > -1)
{
string strInput = sr.ReadLine();
temp += strInput;
}
sr.Close();
Stream sObjRawXmlResponse = new MemoryStream(ASCIIEncoding.Default.GetBytes(temp));
XmlDocument rawXmlDoc = new XmlDocument();
rawXmlDoc.Load(sObjRawXmlResponse);
rawResponseXml = rawXmlDoc.DocumentElement;
Stream sObjArray = new MemoryStream(ASCIIEncoding.Default.GetBytes(temp));
objArray = InstanceInvoke("ReadResponse", message, webResponse, sObjArray, false) as object[];
#region SchemaValidater
Stream sXmlValidater = new MemoryStream(ASCIIEncoding.Default.GetBytes(temp));
XmlDocument reponseXml = new XmlDocument();
reponseXml.Load(sXmlValidater);
XmlNodeList nodesForSoapBody = reponseXml.GetElementsByTagName("soap:Body");
foreach (XmlNode soapBody in nodesForSoapBody)
{
XmlValidater(schema, soapBody.InnerXml);
}
#endregion
}
catch (XmlSchemaValidationException exception)
{
throw new XmlSchemaValidationException("WebResponseBadXml", exception);
}
catch (XmlException exception)
{
throw new InvalidOperationException("WebResponseBadXml", exception);
}
finally
{
if (responseStream != null)
{
responseStream.Close();
}
}
}
finally
{
if (webRequest == PI_BasePendingSyncRequest.GetValue(this, null) as WebRequest)
{
if (PI_BasePendingSyncRequest.CanWrite)
{
PI_BasePendingSyncRequest.SetValue(this, null, null);
}
}
}
return objArray;
}