2

データベース (C#) にファイルをアップロードするために WCF を使用していますが、このエラーが発生しました。リモート サーバーが予期しない応答 (413) を返しました。要求エンティティが大きすぎます。

IService.cs のコード

[OperationContract]
  void UploadFile(RemoteFileInfo request);

[MessageContract] public class DownloadRequest { [MessageBodyMember] public string FileName; }

[MessageContract]
public class RemoteFileInfo : IDisposable
{
    [MessageHeader(MustUnderstand = true)]
    public string FileName;     

    [MessageHeader(MustUnderstand = true)]
    public int ItemID;
    [MessageHeader(MustUnderstand = true)]
    public string FileExt;
    [MessageBodyMember(Order = 1)]
    public System.IO.Stream FileByteStream;

    public void Dispose()
    {
        if (FileByteStream != null)
        {
            FileByteStream.Close();
            FileByteStream = null;
        }
    }

Service.svc.cs のコード

 public void UploadFile(RemoteFileInfo request)
        {
            AttachmentDTO objDTO = new AttachmentDTO();
            //FileStream targetStream = null;
            Stream stream = request.FileByteStream;
            const int bufferLen = 65000;
           // byte[] buffer = new byte[bufferLen];
           //  objDTO.FileData = buffer;
            AttachmentBLL objBLL = new AttachmentBLL();
            try
            {
                byte[] readBuffer = new byte[bufferLen];

                int totalBytesRead = 0;
                int bytesRead;

                while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0)
                {
                    totalBytesRead += bytesRead;

                    if (totalBytesRead == readBuffer.Length)
                    {
                        int nextByte = stream.ReadByte();
                        if (nextByte != -1)
                        {
                            byte[] temp = new byte[readBuffer.Length * 2];
                            Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);
                            Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);
                            readBuffer = temp;
                            totalBytesRead++;
                        }
                    }
                }

                byte[] buffer = readBuffer;
                if (readBuffer.Length != totalBytesRead)
                {
                    buffer = new byte[totalBytesRead];
                    Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead);
                }
                objDTO.FileData = buffer;
                objDTO.FileName = request.FileName;
                objDTO.CreatedDate = DateTime.Now;
                objDTO.CreatedBy = "user";
                objDTO.IsActive = true;
                objDTO.FileExt = request.FileExt;
                objBLL.AddAttachment(objDTO);


            }
            catch (Exception ex)
            { 

            }

        }

objBLL.AddAttachment (objDTO); このメソッドはビジネス ロジック ファイルにあります。BLL は DAL と通信できますが、DAL は WCF サービスと通信できません。

 This Code is written in page.aspx.cs file.  



 if (fuAttachment.HasFile)
            {
                string abs = fuAttachment.PostedFile.FileName;
                System.IO.FileInfo fileInfo = new System.IO.FileInfo(fuAttachment.PostedFile.FileName);

                MyService.RemoteFileInfo uploadRequestInfo = new MyService.RemoteFileInfo();

                using (System.IO.FileStream stream = new System.IO.FileStream(fuAttachment.PostedFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
                {
                    uploadRequestInfo.FileName = fuAttachment.FileName;
                    uploadRequestInfo.Length = fileInfo.Length;
                    uploadRequestInfo.FileByteStream = fuAttachment.FileContent;
                    uploadRequestInfo.ItemID = itemId;
                    uploadRequestInfo.FileExt = fuAttachment.PostedFile.ContentType;
                    client.UploadFile(uploadRequestInfo.FileExt, uploadRequestInfo.FileName, uploadRequestInfo.ItemID, uploadRequestInfo.FileByteStream);

                }
            }

web.config

<binding name="WSHttpBinding_IEMRProWCFService" closeTimeout="04:01:00"
          openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="128"
       maxStringContentLength="2147483647" maxArrayLength="2147483647"
       maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="None">
            <transport clientCredentialType="None"
                    proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>

および Service .config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.web>
    <compilation debug="true" />
    <httpRuntime maxRequestLength="2147483647" />

  </system.web>

  <system.serviceModel>
    <services>
      <service name="WCFService.EMRProWCFService">
        <endpoint address="" binding="wsHttpBinding" contract="WCFService.IEMRProWCFService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>



    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 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" />
    <bindings>
      <webHttpBinding>
        <binding name="WebConfiguration"
                 maxBufferSize="65536"
                 maxReceivedMessageSize="2147483647"
                 transferMode="Streamed">
        </binding>
      </webHttpBinding>
    </bindings>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <directoryBrowse enabled="true" />
  </system.webServer>

</configuration>

私が間違えたところを誰か助けてくれませんか...ありがとう

4

1 に答える 1