トップ回答者
Webサービスで作成した処理がタイムアウトしてしまう

質問
-
お世話になります。
Dynamics CRM 2011を使用しているのですが、以前までは動いていた処理が途中で終了してしまいました。
Visual Studioでデバッグしたところ、以下のようなエラーメッセージが返ってきました。--------------------------------------------------------------------------------------------
要求チャネルは、応答を待機してから 00:01:59.8905882 後にタイムアウトしました。
Request の呼び出しに渡すタイムアウト値を増やすか、BindingのSendTimeout 値を増やしてください。
この操作に割り当てられた時間は、より長いタイムアウト時間の一部であった可能性があります。
○○○(URL)に対するHTTP要求が、割り当てられたタイムアウト時間00:02:00を越えました。この操作に割り当てられた時間は、より長いタイムアウト時間の一部であった可能性があります。
--------------------------------------------------------------------------------------------
処理は、クエリを実行してDBからデータを取得するものなのですが、件数がとても多く、ページングや副問合せなど少し複雑な作りになっています。
(クエリは、sqlファイルを呼び出すのでなく、ソースコードに書いています。)
また、この処理はWebサービスを利用して作成したものです。
エラーメッセージにもありますし、今回は件数も多かったのでタイムアウトエラーなのだと思います。
今までは正常に動いていた為、ソースを変更するのではなく、タイムアウトの設定時間を延ばすことで対処できたらと考えています。
以下のページに書いてある1~3は試してみましたが、改善されませんでした。(4はどの場所にどのように書いていいのか不明だったため、試していません。)
https://blogs.msdn.microsoft.com/crminthefield/2011/06/13/microsoft-dynamics-crm-timeout-settings/
また、エラーメッセージにある「BindingのSendTimeout 値」についてはどのように増やすのでしょうか。
WCFですが、以下のように記述すればよいのかと思い、処理が書いてあるソースファイルにC#の方を書いてみたり、webconfigにXMLのサンプルのように書いてみたりしましたが、効果がないようでした。
どこか別の場所へ書くべきなのでしょうか。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-timeout-values-on-a-binding
解決策をご存知の方、いらっしゃいましたらよろしくお願いいたします。
回答
-
こんにちは。
今回の件ですが、自己解決しました。
以下の記事に沿ってソースコードを書き換えたところ、投稿していたエラーは出なくなりました。
https://brettrattey.wordpress.com/2011/06/28/crm-2011-timeout-error-unhandled-exception-system-timeoutexception/
ただ、次はSQLのタイムアウトエラーが出るようになってしまったので、次はSQL Serverのフォーラムへ質問してみたいと思います。
ご回答、有難うございました。
- 回答としてマーク myu_49 2018年6月6日 23:39
-
OrganizationServiceProxy.TimeOutを利用していますね、無事に解決出来て良かったです。 SQL Timeoutを増やすには、 https://blogs.msdn.microsoft.com/crminthefield/2011/06/13/microsoft-dynamics-crm-timeout-settings/ に記載されている ①レジストリ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\OLEDBTimeout ②Web.configの <httpRuntime executionTimeout="300" /> 合わせて変更すれば実現可能です。 ★②の値>①の値必要 ★①の値変更時IISリセット必要かどう未検証
- 回答としてマーク myu_49 2018年6月6日 23:40
すべての返信
-
こんにちは。
SDKのOrganizationServiceのデフォルトタイムアウト設定は2分になっています。
構成ファイルに以下のように設定すればタイムアウトを延ばすことは可能です。
<configuration>
<connectionStrings>
<!-- On-premises using Windows integrated security,change timeout to 3 minute -->
<add name="Xrm"
connectionString="Url=http://localhost/targetorg;Service Configuration Instance Mode=PerInstance;Timeout=00:03:00;"/>
</connectionStrings>
</configuration>
使用例:
using (var service = new OrganizationService("Xrm"))
{
QueryExpression query = new QueryExpression("account");
query.ColumnSet.AllColumns = true;
query.Criteria.FilterOperator = LogicalOperator.Or;
query.Criteria.AddCondition("name", ConditionOperator.EndsWith, "会社");
var result = service.RetrieveMultiple(query);
}
OrganizationServiceクラスが内部的にOrganizationServiceProxyを利用して実装されいます。
OrganizationServiceProxyを利用する場合、OrganizationServiceProxy.TimeOutプロパティを直接変更してもOKです。
上記の設定を行えば、WCFのBingのSendTimeoutが上書きされるため、個別設定は不要です。
個人的な見解で間違ったらご指摘ください。
-
こんにちは。
今回の件ですが、自己解決しました。
以下の記事に沿ってソースコードを書き換えたところ、投稿していたエラーは出なくなりました。
https://brettrattey.wordpress.com/2011/06/28/crm-2011-timeout-error-unhandled-exception-system-timeoutexception/
ただ、次はSQLのタイムアウトエラーが出るようになってしまったので、次はSQL Serverのフォーラムへ質問してみたいと思います。
ご回答、有難うございました。
- 回答としてマーク myu_49 2018年6月6日 23:39
-
OrganizationServiceProxy.TimeOutを利用していますね、無事に解決出来て良かったです。 SQL Timeoutを増やすには、 https://blogs.msdn.microsoft.com/crminthefield/2011/06/13/microsoft-dynamics-crm-timeout-settings/ に記載されている ①レジストリ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\OLEDBTimeout ②Web.configの <httpRuntime executionTimeout="300" /> 合わせて変更すれば実現可能です。 ★②の値>①の値必要 ★①の値変更時IISリセット必要かどう未検証
- 回答としてマーク myu_49 2018年6月6日 23:40