0

大きなデータ ファイルを「Azureテーブルストレージ」にアップロードする非常に時間のかかる方法を持つ WCF サービスがあります。

次のように、クライアント側で実行時にタイムアウトを設定しました:-

binding = new BasicHttpBinding();
binding.CloseTimeout = TimeSpan.FromMilliseconds(2147483647.0);
binding.OpenTimeout = TimeSpan.FromMilliseconds(2147483647.0);
binding.ReceiveTimeout = TimeSpan.FromMilliseconds(2147483647.0);
binding.SendTimeout = TimeSpan.FromMilliseconds(2147483647.0);

私のweb.configには次のようにタイムアウトが設定されています:-

<bindings>
      <basicHttpBinding>
        <binding maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" sendTimeout="22:30:00" receiveTimeout="22:30:00" openTimeout="22:30:00" closeTimeout="22:30:00" maxBufferSize="2147483647">
          <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" />
        </binding>
      </basicHttpBinding>
    </bindings>

VS 2012 でコードを実行していますが、ファイルのアップロード メソッドが 60 分後に未処理の CommunicationException: The remote server returned an error: NotFound でクラッシュするという問題が発生しています。F5 を押すと、アップロードが続行されて完了します。この時点で、クラッシュが Reference.cs ファイルに表示されます。

public void EndFileUploadMethod(System.IAsyncResult result) {
                object[] _args = new object[0];
                base.EndInvoke("FileUploadMethod", _args, result);
4

2 に答える 2

0

同様の紺碧のブロブを使用してコンテンツを保存します。私のコードにはタイムアウト設定がありません。これを試して、私に知らせてください。

    public static CloudBlobContainer Container
    {
        get
        {
            CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
                {
                    // Provide the configSetter with the initial value
                    configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
                    RoleEnvironment.Changed += (sender, arg) =>
                    {
                        if (arg.Changes.OfType<RoleEnvironmentConfigurationSettingChange>().Any((change) =>
                        (change.ConfigurationSettingName == configName)))
                        {
                            // The corresponding configuration setting has changed, so propagate the value
                            if (!configSetter(RoleEnvironment.GetConfigurationSettingValue(configName)))
                            {
                                // In this case, the change to the storage account credentials in the
                                // service configuration is significant enough that the role needs to be
                                // recycled in order to use the latest settings (for example, the 
                                // endpoint may have changed)
                                RoleEnvironment.RequestRecycle();
                            }
                        }
                    };
                });
            CloudStorageAccount acc = CloudStorageAccount.FromConfigurationSetting("RecordingsStorageAccount");
            CloudBlobClient bc = acc.CreateCloudBlobClient();
            CloudBlobContainer c = bc.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("RecordingsContainer"));
            return c;
        }
    }
于 2013-02-26T14:27:04.463 に答える
0

ファイルのアップロードの場合は、他にもいくつかの構成を行う必要があります。まず、アップロードしようとしているファイルのサイズはどれくらいですか? それらが 50MB 程度を超える場合は、それらをより小さな断片にチャンクして送信する必要がある場合があります。

その前に、以下の設定を構成に追加してみてください。<authentication><compilation>タグは気にしないでください。興味深いのは<httpRuntime>とタグです。<requestLimits>

私のmaxAllowedContentLength属性値は以下の任意なので、好きなように設定できます。バイト単位で測定されていると思います。

  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <authentication mode="Windows" />
    <httpRuntime maxRequestLength="2147483647" />
  </system.web>

  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2000000000" />
      </requestFiltering>
    </security>
  </system.webServer>
于 2013-02-26T14:21:04.640 に答える