我有一个ASP.NET 4.0应用程序。
使用链接源(服务实现)的.svc
文件托管Web服务。
Web服务.svc
文件位于应用程序根目录WebServs
中的目录MyApp/WebServs/mysvc.svc
内。
使用Web.config
(在根目录中)设置Web服务。
<!-- Service model -->
<system.serviceModel>
<services>
<service name="DataAccessService">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding_ISRV"
contract="MyNamespace.ISRV">
</endpoint>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBinding_ISRV" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="1310720"
maxArrayLength="16384"
maxBytesPerRead="24096"
maxDepth="10000"
maxNameTableCharCount="16384"/>
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
OK!
当我调用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);
}
}
此例程由客户端调用。 Whilke Web.config
用于配置服务服务器端。
当我尝试使用大型消息执行我的服务时(一切都是微小的消息)我得到:
格式化程序在尝试反序列化时抛出异常 消息:尝试反序列化参数时出错 http://((Namespace)):((Operation))。 InnerException消息 是'反序列化类型的对象时出错 ((类型)), App_Code.s5qoir2n,Version = 0.0.0.0,Culture = neutral, 公钥=空]。最大字符串内容长度配额(8192) 读取XML数据时已超出。这个配额可能会增加 通过更改上的MaxStringContentLength属性 创建XML阅读器时使用的XmlDictionaryReaderQuotas对象。 第31行,位置1309.'。有关详细信息,请参阅InnerException。
不明白。服务和客户端都有共同的设置,这会读取defaut值?????此外,我做了很多其他用户按照StackOverflow中的说明进行操作。
请帮帮我。三江源
答案 0 :(得分:1)
您指定了WCF 4.0(确切地说,ASP.NET 4.0),所以我想知道您遇到的问题是您实际上是否正在访问默认端点,默认端点将使用绑定的默认值,除非否则被覆盖?
WCF 4.0将提供默认端点(设置为服务所在的位置)。该默认端点很可能使用绑定的默认值(在MaxStringContentLength的情况下为8192)。
由于您在WebServs目录(根目录)上方的目录中对服务进行了所有配置,可能是它采用了默认端点?我确实知道Web.config文件将继承上面的文件,但如果你还没有,至少要考虑这个问题。
有关默认端点和4.0的其他更改的更多信息,请访问:A Developer's Introduction to Windows Communication Foundation 4