SoapHttpClientProtocol 的invoke 函数

im2web 2009-11-11 12:14:46
如何使用 在 invoke 之前 和invoke 之后

获取 发送的soap 的内容 和 获取的soap 的内容呢?
...全文
467 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
testing2007 2010-11-02
  • 打赏
  • 举报
回复
zhongjiekangping
今天发现当我们的程序上传大容量数据的时候,出现了异常SoapException.错误及堆栈信息如下:

错误信息:
((System.Web.Services.Protocols.SoapException)(ex)) {"运行配置文件中指定的扩展时出现异常。 ---> 超过了最大请求长度。"}

stackTrace:
在 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
在 VAS.Flows.Common.cn.ceopen.vasvisit.newVersion.LiuLiangWebService.UpdataDomainFlux(String MachineName, DataTable dt)
在 VAS.Flows.Common.Statics.UploadAllData()

在网上查询说是web services的默认长度为4M,有一种方法是修改web config.不过看到你这个方法感觉更好!现正在利用你这部分代码,希望能解决问题。
im2web 2009-11-19
  • 打赏
  • 举报
回复
thank you very much
zhongjiekangping 2009-11-19
  • 打赏
  • 举报
回复

/// <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;
}


hope to help you
gongsun 2009-11-19
  • 打赏
  • 举报
回复
...
happy664618843 2009-11-17
  • 打赏
  • 举报
回复
没有用过 友情帮顶
im2web 2009-11-17
  • 打赏
  • 举报
回复
up
langziqian 2009-11-15
  • 打赏
  • 举报
回复
帮顶
zhongjiekangping 2009-11-14
  • 打赏
  • 举报
回复
之前做过 这方面的 , 就是实现一个 同名的 partial 类 然后 重载 invoke 函数,在函数里面 实现消息的 序列化 和 反序列化

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧