gpt4 book ai didi

c# - WCF - 大文件上传 - (413) 请求实体太大

转载 作者:行者123 更新时间:2023-11-30 21:57:03 25 4
gpt4 key购买 nike

有人可以看看我的新代码吗?我被这个错误困住了 3 天了,它快把我逼疯了......

我正在尝试上传 WCF 文件,但没有上传大文件

我收到此错误:“远程服务器返回意外响应:(413) 请求实体太大。”

我的项目由 3 个部分组成:

  1. WCF 服务

  2. 使用该服务的用户控件

  3. 使用用户控件的网站

这是我的服务 we.config:

<system.serviceModel>

<services>
<service name="AttachmentService" behaviorConfiguration="">
<endpoint name="DefaultEndPoint" address="http://localhost:54893/AttachmentService.svc"
behaviorConfiguration="EndpointBehaviors"
binding="wsHttpBinding" bindingName="AttachmentBinding"
contract="AttachmentsService.IAttachmentService"></endpoint>
</service>
</services>

<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>

<endpointBehaviors>
<behavior name="EndpointBehaviors">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</endpointBehaviors>
</behaviors>

<bindings>
<basicHttpBinding>
<binding name="AttachmentBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" receiveTimeout="00:01:00" sendTimeout="00:01:00"
textEncoding="utf-8" openTimeout="00:01:00">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
</system.serviceModel>

这是我的用户控件 app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IAttachmentService" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:54893/AttachmentService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAttachmentService"
contract="AttachmentsService.IAttachmentService" name="BasicHttpBinding_IAttachmentService" />
</client>
</system.serviceModel>
</configuration>

这是我的 UI web.config:

<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
<serverRuntime enabled="true" uploadReadAheadSize="2147483647" maxRequestEntityAllowed="2147483647" />
</system.webServer>

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IAttachmentService" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:54893/AttachmentService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAttachmentService"
contract="AttachmentsService.IAttachmentService" name="BasicHttpBinding_IAttachmentService" />
</client>
</system.serviceModel>

下面是我如何实现引用调用:

public void UploadFile(string serviceUrl,decimal maxFileSize, AttachmentFileParams fileParams, Stream file)
{
AttachmentServiceClient client = null;
try
{
if (file.Length > (maxFileSize * 1024)) //maxFileSize is defined in KB and file.Length is in Bytes
return Serialization.ConvertToJson(new { IsError = true, ErrorMessage = Constants.Messages.MaxFileSizeExceeded + maxFileSize });

string requestUrl = string.Format("{0}/UploadFile", serviceUrl);
string jsonFile = Serialization.ConvertToJson(fileParams);
byte[] jsonFileBytes = Encoding.UTF8.GetBytes(jsonFile);
byte[] len = BitConverter.GetBytes(jsonFileBytes.Length);

using (client = new AttachmentServiceClient())
{
client.UploadFile(file);
}
}
catch (Exception ex)
{ }
finally
{
try
{
if (client.State != System.ServiceModel.CommunicationState.Closed)
client.Close();
}
catch
{
client.Abort();
}
}
}

有什么我遗漏的吗?

最佳答案

好吧,我终于解决了这个问题,这是对我有用的配置文件:

WCF 服务 web.config 文件:

    <?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime maxRequestLength="2147483647" />
</system.web>

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<!-- The name of the service -->
<service name="WcfService1.Service1">
<!--you can leave the address blank or specify your end point URI-->
<endpoint binding="webHttpBinding" bindingConfiguration="higherMessageSize" contract="WcfService1.IService1" behaviorConfiguration="Web" />
</service>
</services>
<bindings>
<webHttpBinding>
<!-- configure the maxReceivedMessageSize value to suit the max size of the request (in bytes) you want the service to receive-->
<binding name="higherMessageSize" transferMode="Streamed" maxReceivedMessageSize="2147483647" />
</webHttpBinding>
</bindings>

<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="Web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<!--<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />-->
</system.serviceModel>

<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>

客户端 app.config/web.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime maxRequestLength="2147483647" />
</system.web>

<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="BasicHttpBinding_IService1" maxReceivedMessageSize="2147483647" />
</webHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:59540/Service1.svc" behaviorConfiguration="webhttp"
binding="webHttpBinding" bindingConfiguration="BasicHttpBinding_IService1"
contract="ServiceReference1.IService1" name="BasicHttpBinding_IService1" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="webhttp">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

我希望它能节省其他人解决问题的时间:-)

关于c# - WCF - 大文件上传 - (413) 请求实体太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30976160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com