メモリをリークしているWCFサービス呼び出しに問題があります。私たちの研究では、サービスを正しく呼び、それから適切に戻ってくるエラーを処理していると考えています。 MSウェブサイトから取得したMSDNの記事とサンプルのWCFコードでも確認しました。メモリリークの原因となるWCF呼び出し
ここに漏れの原因となるコードのサンプルを示します。 SaveAssociation呼び出しでは、反対側のコードが例外をスローします。これにより、チャネルはフォルト状態になります。最初のcatchステートメントは、例外(SystemException)をキャッチし、クライアントでAbort()を呼び出します。これは、セッションを直ちに中断してクライアント接続を閉じる必要があります。しかし、このプロセスを見てループを繰り返しこのコードを実行すると、プロセスの登りと登りで使用されるメモリがわかります。ここで
var client = new FrameworkServiceReference.MAServiceClient();
// Get User domain name
client.ClientCredentials.UserName.UserName = "username";
client.ClientCredentials.UserName.Password = "password";
OperationContextScope a1 = new OperationContextScope(client.InnerChannel);
MessageHeader<string> customHeaderAppID = new MessageHeader<string>("Account Management");
System.ServiceModel.Channels.MessageHeader a2 = customHeaderAppID.GetUntypedHeader("application", "http://www.ma.com");
OperationContext.Current.OutgoingMessageHeaders.Add(a2);
try
{
client.SaveAssociation(association);
client.Close();
}
catch (SystemException se)
{
client.Abort();
}
catch (Exception ex)
{
client.Abort();
}
は、私たちが受け取るエラーは、この漏れを止めるために何ができるか...
System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Object reference not set to an instance of an object. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.NullReferenceException: Object reference not set to an instance of an object.
at Multiview.Business.Core.CoreObject.ValidateItem(String Item, String Value)
at Multiview.Business.Core.User.UpdateUser()
at Multiview.Business.Core.User.Save()
at Multiview.Core.ServiceLibrary.MultiviewService.SaveCRMUser(User user, Guid CRMGuid)
at SyncInvokeSaveCRMUser(Object , Object[] , Object[])
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
at System.ServiceMode...).
のですか?
ビンゴ、OperationContextScopeが問題でした。私はそのオブジェクトを作成するために使用してコードをリファクタリングし、すべてがうまくいきます。助けてくれてありがとう!! –