尝试将大字节[]传递给wcf服务时出现此错误 我的IService代码:
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, UriTemplate = "SaveFile")]
SaveFileResult SaveFile(byte[] FileBytes, string FileName, decimal Filesize, string IntegrationSystem, string TellerIndentity, string SendingOfficeCode, string SendingArea);
服务代码:
public SaveFileResult SaveFile(byte[] FileBytes, string FileName, decimal Filesize, string IntegrationSystem, string TellerIndentity, string SendingOfficeCode, string SendingArea)
{
FileFactory _FileFactory = new FileFactory();
string _strExt = Path.GetExtension(FileName);
IFileDealer _IFileDealer = _FileFactory.GetFileDealer(_strExt);
SaveFileResult _Result=_IFileDealer.SaveFile(FileBytes, FileName, Filesize, IntegrationSystem, TellerIndentity, SendingOfficeCode, SendingArea);
return _Result;
}
wcf服务配置:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="CenterPostEntities" connectionString="metadata=res://*/DatabaseDesign.GRemModel.csdl|res://*/DatabaseDesign.GRemModel.ssdl|res://*/DatabaseDesign.GRemModel.msl;provider=System.Data.SqlClient;provider connection string="data source=TEST-SH\SQL2005;initial catalog=CenterPost;user id=sa;password=itsc;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
<appSettings>
<add key="PermittedFastUploadSize" value="1000000"/>
<add key ="GRemLog" value="d:\GRemLog"/>
<add key="FileUploadPath" value="d:\FileUpload"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime maxRequestLength="2097151" />
</system.web>
<system.serviceModel>
<!--======================-->
<bindings>
<basicHttpBinding>
<binding name="basicHttpBindingSettings" openTimeout="00:01:00" receiveTimeout="05:00:00" sendTimeout="05:00:00" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647777" messageEncoding="Text">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<!--======================-->
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<serverRuntime enabled="true" uploadReadAheadSize="2147483647" />
</system.webServer>
请任何人帮我解决这个问题 我在iis7上增加了uploadReadAheadSize,但仍无效 我想知道为什么这段代码不起作用
答案 0 :(得分:4)
您在配置文件中定义的绑定(“basicHttpBindingSettings”)未被WCF服务使用,因为您没有定义使用它的端点。使用WCF 4.0+时,如果配置文件中没有定义端点,则会创建一个默认端点(开箱即用,绑定将为basicHttpBinding
并带有默认值。)
您有两种方法可以解决此问题。
首先,您可以通过省略name
属性来使绑定定义成为默认值,如下所示:
<bindings>
<basicHttpBinding>
<binding openTimeout="00:01:00" receiveTimeout="05:00:00"
sendTimeout="05:00:00" maxReceivedMessageSize="2147483647"
maxBufferPoolSize="2147483647777" messageEncoding="Text">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
这将是basicHttpBinding
的默认配置。
第二个选项是定义一个显式端点,并通过bindingConfiguration
属性为其分配绑定配置,如下所示:
<services>
<service name="<service name>">
<endpoint address="" binding="basicHttpBinding"
bindingConfiguration="basicHttpBindingSettings"
contract="<fully qualified contract name>" />
</service>
</services>
有关默认端点和绑定的详细信息,请参阅A Developer's Introduction to Windows Communication Foundation 4。