我有一个 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>
好的!
当我调用 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);
}
}
该例程由客户端调用。而Web.config
用于配置服务服务器端。
当我尝试使用大消息(小消息没问题)执行我的服务时,我得到:
格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数 http://((Namespace)):((Operation )) 时出错。InnerException 消息是“反序列化类型为 ((Type))、App_Code.s5qoir2n、Version=0.0.0.0、Culture=neutral、PublicKeyToken=null] 的对象时出错。读取 XML 数据时已超出最大字符串内容长度配额 (8192)。可以通过更改创建 XML 阅读器时使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性来增加此配额。第 31 行,位置 1309.'。有关更多详细信息,请参阅 InnerException。
不明白。服务和客户端都有共同的设置,这会读取默认值??????此外,我按照 StackOverflow 中的说明执行了许多其他用户的操作。
请帮我。谢谢