ASP.NET应用程序中的readerQuotas问题
我有一个ASP.NET4.0应用程序 Web服务使用链接源(服务实现)的ASP.NET应用程序中的readerQuotas问题,asp.net,wcf,web-services,readerquotas,Asp.net,Wcf,Web Services,Readerquotas,我有一个ASP.NET4.0应用程序 Web服务使用链接源(服务实现)的.svc文件托管。 web服务.svc文件位于应用程序根目录的WebServs目录中:MyApp/WebServs/mysvc.svc 使用web.config(根目录中)设置web服务 好的 调用web服务时,我使用例程创建通道,以封装此常用逻辑: public static ISRV GetService() { try { // Create the service endpoint Basic
.svc
文件托管。
web服务.svc
文件位于应用程序根目录的WebServs
目录中:MyApp/WebServs/mysvc.svc
使用web.config
(根目录中)设置web服务
好的
调用web服务时,我使用例程创建通道,以封装此常用逻辑:
public static ISRV GetService() {
try {
// Create the service endpoint
BasicHttpBinding bhttpb = new BasicHttpBinding(
BasicHttpSecurityMode.TransportCredentialOnly);
bhttpb.MaxReceivedMessageSize = 2147483647;
bhttpb.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas();
bhttpb.ReaderQuotas.MaxArrayLength = 16384);
bhttpb.ReaderQuotas.MaxBytesPerRead = 24096);
bhttpb.ReaderQuotas.MaxDepth = 10000);
bhttpb.ReaderQuotas.MaxNameTableCharCount = 16384);
bhttpb.ReaderQuotas.MaxStringContentLength = 1310720);
ServiceEndpoint httpEndpoint =
new ServiceEndpoint(
ContractDescription.GetContract(typeof(ISRV)),
bhttpb,
new EndpointAddress());
// Create channel factory and get proper channel for service.
ChannelFactory<ISRV> channelFactory = new ChannelFactory<ISRV>(httpEndpoint);
IDAS svc = channelFactory.CreateChannel();
return svc;
} catch (Exception e) {
throw new DASException("DAS Exception: " + e.Message);
}
}
publicstaticisrvgetservice(){
试一试{
//创建服务端点
BasicHttpBinding bhttpb=新的BasicHttpBinding(
基本TPSecurityMode.TransportCredentialOnly);
bhttpb.MaxReceivedMessageSize=2147483647;
bhttpb.ReaderQuotas=new System.Xml.XmlDictionaryReaderQuotas();
bhttpb.ReaderQuotas.MaxArrayLength=16384);
bhttpb.ReaderQuotas.MaxBytesPerRead=24096);
bhttpb.ReaderQuotas.MaxDepth=10000);
bhttpb.ReaderQuotas.MaxNameTableCharCount=16384);
bhttpb.ReaderQuotas.MaxStringContentLength=1310720);
ServiceEndpoint httpEndpoint=
新ServiceEndpoint(
合同说明.GetContract(类型(ISRV)),
bhttpb,
新端点地址());
//创建渠道工厂并获得适当的服务渠道。
ChannelFactory ChannelFactory=新的ChannelFactory(httpEndpoint);
IDAS svc=channelFactory.CreateChannel();
返回svc;
}捕获(例外e){
抛出新的DASException(“DAS异常:+e.Message”);
}
}
此例程由客户端调用。而Web.config
用于配置服务服务器端
当我尝试使用大消息(小消息)执行服务时,我得到:
格式化程序在尝试反序列化
消息:尝试反序列化参数时出错
)). InnerException消息
was'反序列化类型的对象时出错
((类型)),
App_Code.s5qoir2n,版本=0.0.0.0,文化=中性,
PublicKeyToken=null]]。最大字符串内容长度配额(8192)
读取XML数据时已超过。这一配额可能会增加
通过更改
创建XML读取器时使用的XmlDictionaryReaderQuotas对象。
第31行,位置1309'。有关更多详细信息,请参阅InnerException
我不明白。服务和客户端都有公共设置,这会读取defaut值?????此外,我在StackOverflow中按照这里的说明做了很多其他用户做的事情
请帮帮我。谢谢您指定了WCF 4.0(确切地说是ASP.NET 4.0),所以我想知道您遇到的问题是否是您实际遇到了一个默认端点,除非被重写,否则该端点将使用绑定的默认值
WCF 4.0将提供一个默认端点(设置为服务所在的位置)。该默认端点最有可能使用绑定的默认值(MaxStringContentLength为8192)
既然您在WebServs目录(根目录)上方的目录中为服务进行了所有配置,那么它可能会求助于默认端点?我确实意识到Web.CONFIG文件将继承上面的这些文件,但是如果你还没有考虑,这是至少要考虑的事情。
有关4.0的默认端点和其他更改的更多信息,请参见此处:您指定了WCF 4.0(确切地说,是ASP.NET 4.0),因此我想知道您遇到的问题是否是您实际遇到了默认端点,除非被覆盖,否则将使用默认值进行绑定
WCF 4.0将提供一个默认端点(设置为服务所在的位置)。该默认端点最有可能使用绑定的默认值(MaxStringContentLength为8192)
既然您在WebServs目录(根目录)上方的目录中为服务进行了所有配置,那么它可能会求助于默认端点?我确实意识到Web.CONFIG文件将继承上面的这些文件,但是如果你还没有考虑,这是至少要考虑的事情。
有关4.0的默认端点和其他更改的更多信息,请参见此处:您的观点是正确的,我需要插入一个常规绑定,而特定的绑定现在可以工作了……这个答案解决了我遇到的类似问题。非常感谢。你的观点是正确的,我需要插入一个通用的绑定,具体的现在可以工作了…这个答案解决了我遇到的类似问题。非常感谢。
public static ISRV GetService() {
try {
// Create the service endpoint
BasicHttpBinding bhttpb = new BasicHttpBinding(
BasicHttpSecurityMode.TransportCredentialOnly);
bhttpb.MaxReceivedMessageSize = 2147483647;
bhttpb.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas();
bhttpb.ReaderQuotas.MaxArrayLength = 16384);
bhttpb.ReaderQuotas.MaxBytesPerRead = 24096);
bhttpb.ReaderQuotas.MaxDepth = 10000);
bhttpb.ReaderQuotas.MaxNameTableCharCount = 16384);
bhttpb.ReaderQuotas.MaxStringContentLength = 1310720);
ServiceEndpoint httpEndpoint =
new ServiceEndpoint(
ContractDescription.GetContract(typeof(ISRV)),
bhttpb,
new EndpointAddress());
// Create channel factory and get proper channel for service.
ChannelFactory<ISRV> channelFactory = new ChannelFactory<ISRV>(httpEndpoint);
IDAS svc = channelFactory.CreateChannel();
return svc;
} catch (Exception e) {
throw new DASException("DAS Exception: " + e.Message);
}
}