创建SoapClient对象几个常见错误提示及解决方案
创建SoapClient对象几个常见错误提示及解决方案
//初始化实例
SalesModuleWebServiceSoapClient o = new SalesModuleWebServiceSoapClient();
错误提示:
Error Message:
在 ServiceModel 客户端配置部分中,找不到引用协定“SalesModuleWebService.SalesModuleWebServiceSoap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素。
在 ServiceModel 客户端配置部分中,找不到引用协定“SalesModuleWebService.SalesModuleWebServiceSoap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素。
于是我尝试使用第2,3,4个构造器,错误依旧,试验第5个方法时出现另一个错误!
Error Message:
BasicHttpBinding BINDING = new BasicHttpBinding("SalesModuleWebServiceSoap");
在配置元素集合中找不到任何元素与密钥“SalesModuleWebServiceSoap”匹配。
以上两个错误提示的根本原因是找不到Config文件或取不到配置文件内的信息,查看工程文件有app.config, 查看debug目录有CSFramework3.WebServiceReference.dll.config 文件。google,baidu搜索文章无果,百思不得其解,无耐之下只能自己取配置文件,源码如下:
/// <summary>
/// 创建销售模块的SOAP Client对象
/// </summary>
/// <returns></returns>
public static SalesModuleWebServiceSoapClient CreateSalesModuleClient()
{
//取ASMX文件URI地址
string endpoint = SoapClientConfig.GetSoapRemoteAddress("SalesModuleWebServiceSoap");
BasicHttpBinding BINDING = new BasicHttpBinding();
SoapClientConfig.ReadBindingConfig(BINDING, "SalesModuleWebServiceSoap");
return new SalesModuleWebServiceSoapClient(BINDING, new EndpointAddress(endpoint));
}
// 来源:www.CSFramework.com, C/S框架网
/// 创建销售模块的SOAP Client对象
/// </summary>
/// <returns></returns>
public static SalesModuleWebServiceSoapClient CreateSalesModuleClient()
{
//取ASMX文件URI地址
string endpoint = SoapClientConfig.GetSoapRemoteAddress("SalesModuleWebServiceSoap");
BasicHttpBinding BINDING = new BasicHttpBinding();
SoapClientConfig.ReadBindingConfig(BINDING, "SalesModuleWebServiceSoap");
return new SalesModuleWebServiceSoapClient(BINDING, new EndpointAddress(endpoint));
}
// 来源:www.CSFramework.com, C/S框架网
通过GetSoapRemoteAddress自定义方法获到URI地址,创建实例成功。
在测试程序中偶然又出现另一个错误,原因是SOAP不支持大数据包,在下载大图片文件时报错的:
Error Message:
格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: SO_GetBusinessByKeyResponse。InnerException 消息是“反序列化对象 属于类型 CSFramework3.WebServiceReference.SalesModuleWebService.SO_GetBusinessByKeyResponseBody 时出现错误。读取 XML 数据时,超出最大数组长度配额(16384)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxArrayLength 属性,可增加此配额。 第 1 行,位置为 36611。”。有关详细信息,请参阅 InnerException。
格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: SO_GetBusinessByKeyResponse。InnerException 消息是“反序列化对象 属于类型 CSFramework3.WebServiceReference.SalesModuleWebService.SO_GetBusinessByKeyResponseBody 时出现错误。读取 XML 数据时,超出最大数组长度配额(16384)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxArrayLength 属性,可增加此配额。 第 1 行,位置为 36611。”。有关详细信息,请参阅 InnerException。

错误提示告诉我需要改XmlDictionaryReaderQuotas.MaxArrayLength 属性,在app.config文件内改好了,运行后错误依旧!根本原因仍是找不到config文件,于是补充代码:
/// <summary>
/// 设置BasicHttpBinding对象的配置信息
/// </summary>
/// <param name="BINDING">BasicHttpBinding对象</param>
/// <param name="bindingName">bindingName</param>
public static void ReadBindingConfig(System.ServiceModel.BasicHttpBinding BINDING, string bindingName)
{
XmlDocument xml = new XmlDocument();
xml.Load(SoapClientConfig.ConfigFile);
string xpath;
XmlNode node;
xpath = "configuration/system.serviceModel/bindings/basicHttpBinding/binding[@name='" bindingName "']";
node = xml.SelectSingleNode(xpath);
BINDING.MaxBufferSize = Int32.Parse(node.Attributes["maxBufferSize"].Value);
BINDING.MaxBufferPoolSize = Int32.Parse(node.Attributes["maxBufferPoolSize"].Value);
BINDING.MaxReceivedMessageSize = Int32.Parse(node.Attributes["maxReceivedMessageSize"].Value);
xpath = "configuration/system.serviceModel/bindings/basicHttpBinding/binding[@name='" bindingName "']/readerQuotas";
node = xml.SelectSingleNode(xpath);
BINDING.ReaderQuotas.MaxDepth = Int32.Parse(node.Attributes["maxDepth"].Value);
BINDING.ReaderQuotas.MaxStringContentLength = Int32.Parse(node.Attributes["maxStringContentLength"].Value);
BINDING.ReaderQuotas.MaxArrayLength = Int32.Parse(node.Attributes["maxArrayLength"].Value);
BINDING.ReaderQuotas.MaxBytesPerRead = Int32.Parse(node.Attributes["maxBytesPerRead"].Value);
BINDING.ReaderQuotas.MaxNameTableCharCount = Int32.Parse(node.Attributes["maxNameTableCharCount"].Value);
}
// 来源:www.CSFramework.com, C/S框架网
/// 设置BasicHttpBinding对象的配置信息
/// </summary>
/// <param name="BINDING">BasicHttpBinding对象</param>
/// <param name="bindingName">bindingName</param>
public static void ReadBindingConfig(System.ServiceModel.BasicHttpBinding BINDING, string bindingName)
{
XmlDocument xml = new XmlDocument();
xml.Load(SoapClientConfig.ConfigFile);
string xpath;
XmlNode node;
xpath = "configuration/system.serviceModel/bindings/basicHttpBinding/binding[@name='" bindingName "']";
node = xml.SelectSingleNode(xpath);
BINDING.MaxBufferSize = Int32.Parse(node.Attributes["maxBufferSize"].Value);
BINDING.MaxBufferPoolSize = Int32.Parse(node.Attributes["maxBufferPoolSize"].Value);
BINDING.MaxReceivedMessageSize = Int32.Parse(node.Attributes["maxReceivedMessageSize"].Value);
xpath = "configuration/system.serviceModel/bindings/basicHttpBinding/binding[@name='" bindingName "']/readerQuotas";
node = xml.SelectSingleNode(xpath);
BINDING.ReaderQuotas.MaxDepth = Int32.Parse(node.Attributes["maxDepth"].Value);
BINDING.ReaderQuotas.MaxStringContentLength = Int32.Parse(node.Attributes["maxStringContentLength"].Value);
BINDING.ReaderQuotas.MaxArrayLength = Int32.Parse(node.Attributes["maxArrayLength"].Value);
BINDING.ReaderQuotas.MaxBytesPerRead = Int32.Parse(node.Attributes["maxBytesPerRead"].Value);
BINDING.ReaderQuotas.MaxNameTableCharCount = Int32.Parse(node.Attributes["maxNameTableCharCount"].Value);
}
// 来源:www.CSFramework.com, C/S框架网
参考文档:
C/S架构软件开发平台 | 旗舰版V6.0 | 自动创建数据库备份计划|C/S开发框架
FastReport.NET 动态创建报表FastReport.Report实例绑定List 数据源
DevExpress ChartControl动态创建按月份按姓名对比的柱状图对比图|C/S开发框架
GitBlit - 使用克隆仓库方式创建、推送VS解决方案源码添加到版本库-C/S开发框架
GitBlit - 创建、推送VS解决方案源码添加到版本库-C/S开发框架
GoF设计模式:建造者模式(Builder Pattern)—复杂对象的组装与创建-C/S开发框架
OLEDB创建DbConnection连接Excel文件报错:未在本地计算机上注册ACE.OLEDB
C# 更新SQL数据发生错误:不能创建大小为 8133 的行,该大小大于所允许的最大行大小 8060。
Activator.CreateInstance 使用指定类型的默认构造函数来创建该类型的实例
删除用户前逻辑判断,检查当前用户是否关联业务数据或创建业务数据
C/S框架创建Ribbon样式的模块功能按钮展示区(RibbonModuleLoader类)
C# ADO.NET根据实体对象类型转换创建DataTable对象
基于透明代理技术创建的WCF实例打开与关闭WCF通道
IntlliTrace.exe系统错误,无法创建新的堆栈防护页
SQLServer2008:阻止保存要求重新创建表的更改问题的设置方法
创建bat文件及运行
C/S架构软件开发平台 | 旗舰版V6.0 | 自动创建数据库备份计划|C/S开发框架
FastReport.NET 动态创建报表FastReport.Report实例绑定List 数据源
DevExpress ChartControl动态创建按月份按姓名对比的柱状图对比图|C/S开发框架
GitBlit - 使用克隆仓库方式创建、推送VS解决方案源码添加到版本库-C/S开发框架
GitBlit - 创建、推送VS解决方案源码添加到版本库-C/S开发框架
GoF设计模式:建造者模式(Builder Pattern)—复杂对象的组装与创建-C/S开发框架
OLEDB创建DbConnection连接Excel文件报错:未在本地计算机上注册ACE.OLEDB
C# 更新SQL数据发生错误:不能创建大小为 8133 的行,该大小大于所允许的最大行大小 8060。
Activator.CreateInstance 使用指定类型的默认构造函数来创建该类型的实例
删除用户前逻辑判断,检查当前用户是否关联业务数据或创建业务数据
C/S框架创建Ribbon样式的模块功能按钮展示区(RibbonModuleLoader类)
C# ADO.NET根据实体对象类型转换创建DataTable对象
基于透明代理技术创建的WCF实例打开与关闭WCF通道
IntlliTrace.exe系统错误,无法创建新的堆栈防护页
SQLServer2008:阻止保存要求重新创建表的更改问题的设置方法
创建bat文件及运行
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
