首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过postman使用rest服务wcf上传大文件

通过postman使用rest服务wcf上传大文件
EN

Stack Overflow用户
提问于 2017-07-17 13:23:59
回答 2查看 694关注 0票数 0

我正在用.net mvc开发一个网站。我在我的web项目中创建了一个wcf服务。我正在尝试通过此服务上传文件。我不能用这个上传大文件。我的代码在这里。请帮帮我。

我的服务接口

代码语言:javascript
复制
[OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "AddDiscount", RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
        Result AddDiscount([MessageParameter(Name = "data")] Stream data);

这里的数据接收图像等参数。

代码语言:javascript
复制
public Result AddDiscount(Stream data)
        {
            Result objResult = new Result();
            TBL_DISCOUNT_MASTER objDiscount = new TBL_DISCOUNT_MASTER();

            long? PostedDiscountId;

            try
            {
                StreamReader reader = new StreamReader(data);
                var str = reader.ReadToEnd();
                objDiscount = JsonConvert.DeserializeObject<TBL_DISCOUNT_MASTER>(str);


                Image dd = objCamel.byteArrayToImage(objDiscount.DISCOUNT_LOGO);
                string FileName = string.Concat(PostedDiscountId, "_logo.jpg");
                var path = Path.Combine(HostingEnvironment.MapPath("~/Content/Images/Discount"), FileName);
                dd.Save(path);

                dd = objCamel.byteArrayToImage(objDiscount.DISCOUNT_IMAGE);
                FileName = string.Concat(PostedDiscountId, "_background.jpg");
                path = Path.Combine(HostingEnvironment.MapPath("~/Content/Images/Discount"), FileName);
                dd.Save(path);

                dd = objQRCode.GetQRCode(PostedDiscountId.ToString()); ;
                FileName = string.Concat(PostedDiscountId, "_qr.jpg");
                path = Path.Combine(HostingEnvironment.MapPath("~/Content/Images/Discount"), FileName);
                dd.Save(path);

                objResult.SUCCESS = 1;
                objResult.MESSAGE = "Thank you for adding a discount offer. Please wait for admin approval.";


                return objResult;
            }
            catch (Exception ex)
            {
                objResult.SUCCESS = 2;
                objResult.MESSAGE = "Failed - " + ex.Message;
                return objResult;
            }

        }

我的web.config

代码语言:javascript
复制
<bindings>
      <basicHttpBinding>
          <binding receiveTimeout="00:10:00" sendTimeout="00:10:00" name="httpsBinding" allowCookies="true" maxBufferPoolSize="2147483647"
              maxReceivedMessageSize="2147483647" transferMode="Streamed">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                  maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
              <security mode="TransportCredentialOnly">
                  <transport clientCredentialType="Basic" />
              </security>
          </binding>
          <binding name="Default">
              <security mode="Transport" />
          </binding>
      </basicHttpBinding>
  </bindings>
<services>
  <service name="Zahhab.Services.Service1" behaviorConfiguration="Default">
    <endpoint address="ZahhabService" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="Zahhab.Services.IService1"/>

  </service>
</services>
EN

回答 2

Stack Overflow用户

发布于 2017-07-17 20:16:03

默认情况下,WCF允许您上传最大29,3MB的文件大小。您可以通过在web.config中更改以下内容来修改此设置。

代码语言:javascript
复制
<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="40960000" />  <!-- allow up to 40 mb -->
      </requestFiltering>
    </security>
</system.webServer>
票数 0
EN

Stack Overflow用户

发布于 2017-07-26 17:48:27

最后我找到了解决方案。我刚刚在我的web.config文件中的existing旁边添加了以下部分。完整的配置是:

代码语言:javascript
复制
<system.serviceModel>
      <bindings>
          <basicHttpBinding>
              <binding receiveTimeout="00:10:00" sendTimeout="00:10:00" name="httpsBinding" allowCookies="true" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" transferMode="Streamed">
                  <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                  <security mode="TransportCredentialOnly">
                      <transport clientCredentialType="Basic" />
                  </security>
              </binding>
          </basicHttpBinding>
          <webHttpBinding>
            <binding transferMode="Streamed" name="webBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="0" receiveTimeout="01:30:00" sendTimeout="01:30:00">
              <readerQuotas maxDepth="2147483647" maxArrayLength="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
            </binding>
          </webHttpBinding>
      </bindings>
    <services>
      <service name="my service name" behaviorConfiguration="Default">
        <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" contract="my contract" />
      </service>
    </services>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
    <behaviors>
      <endpointBehaviors>
        <behavior name="webBehavior">
          <webHttp helpEnabled="true" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45136482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档