Val*_*zub 6 wcf http-status-code-400
上帝,你不喜欢WCF.
我读了所有可能的线程,但我现在真的被卡住了.
这是WCF配置:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BaseHttp"
maxBufferSize="4194304"
maxBufferPoolSize="4194304"
maxReceivedMessageSize="4194304" />
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="TaskServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="TaskServiceBehavior" name="TaskService">
<endpoint
address="http://www.mysite.com/TableTaskService/TableTaskService.svc"
binding="basicHttpBinding" bindingConfiguration="BaseHttp"
contract="TableTaskService.ITableTaskService" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://www.mysite.com/TableTaskService/" />
</baseAddresses>
</host>
</service>
</services>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://www.mysite.com/" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
现在我发送一条消息并抛出这个默认异常(在svclog文件中看到):
已超出传入邮件的最大邮件大小限额(65536).要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性.
现在我清楚地说它应该是4mb.
我的客户代码:
TableTaskServiceClient client =
new TableTaskServiceClient(
new BasicHttpBinding { MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304 },
new EndpointAddress(GetEndpointAddressString())
);
Run Code Online (Sandbox Code Playgroud)
然而它会给我造成这个65536大小的错误.它来自哪里??
客户端设置MaxReceivedMessageSize
与服务器相同的值是否真的很重要?我认为服务器负责确定长度而不是客户端是合乎逻辑的.
还有这个警告(请注意它的含义是多么有用,即:没有关于被覆盖的元素的信息或者我错过了什么信息),也许basichttpbinding正是被覆盖的东西?但为什么会这样呢?无论如何:
[TraceRecord]严重性警告TraceIdentifier http://msdn.microsoft.com/en-US/library/System.ServiceModel.OverridingDuplicateConfigurationKey.aspx 描述配置系统在不同的配置范围内检测到重复的密钥,并覆盖最近的密钥值.AppDomain/LM/W3SVC/11/ROOT/TableTaskService-33-1296567源System.ServiceModel.Configuration.ServiceBehaviorElementCollection/-851144413 ElementName behavior OldElementLineNumber 0 NewElementLineNumber 0
UPDTE:重新配置服务和客户端:
TableTaskServiceClient client = new TableTaskServiceClient(
new BasicHttpBinding {
MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304,
MaxBufferPoolSize=4194304,
ReaderQuotas = new XmlDictionaryReaderQuotas
{
MaxArrayLength = 4194304,
MaxBytesPerRead = 4194304,
MaxDepth = 4194304,
MaxNameTableCharCount = 4194304,
MaxStringContentLength = 4194304
}
}, new EndpointAddress(GetEndpointAddressString()));
Run Code Online (Sandbox Code Playgroud)
同样的错误.
如果这是有意义的,我发送一个长度为467000的byte []数组
尝试这个:
<basicHttpBinding>
<binding name="BaseHttp"
maxBufferSize="4194304"
maxBufferPoolSize="4194304"
maxReceivedMessageSize="4194304">
<readerQuotas maxArrayLength="4194304"
maxBytesPerRead="4194304"
maxDepth="4194304"
maxNameTableCharCount="4194304"
maxStringContentLength="4194304"
/>
</binding>
</basicHttpBinding>
Run Code Online (Sandbox Code Playgroud)
尽管其中一些设置没有意义,但我只是将它们设置为一个较大的值。
另外,一旦您开始工作,我强烈建议您减少这些值,因为它们的存在是为了防止对您的网站进行DoS 攻击。
归档时间: |
|
查看次数: |
1784 次 |
最近记录: |