1

私は次の問題に直面しています:

コントローラからドメインレイヤーに電話をかける必要があります。これは、参照によって要求を受け取るWebサービスメソッドを呼び出します(参照)。

コントローラーコード:

//BusinessEntityObject is a Reference-Type (BusinessEntity) object
var request = View.BusinessEntityObject; 
_workflowService.PerformAction(request);
if(request.Errors.Count != 0)
{
    View.Errors = request.Errors;
    return false;
}

ドメインレイヤー(WorkflowService.csクラス)​​:

public void PerformAction(BusinessEntity request)
{
    //TryAction(System.Action action) basically wraps action in try catch and handles exceptions 
    TryAction(() =>
             {
                 _wcfClient.RequestSomething(ref request);
             });
}

IF_wcfClient.RequestSomethingは、戻り時にエラーコレクションを変更します。リクエストオブジェクトには、このエラーが更新されたエラーコレクションがあります。ただし、制御がコントローラーに戻され、エラー収集がチェックされると、更新は失われます。

Edit00:ああ、恥知らずなプラグ、私は担当者14にいます、そして私は私に役立つたくさんの質問/回答をぶつけようとしました、そしてそれは私が私のレベルが低いので私ができないと言います。

Edit01:ディランに感謝します。このようなサイトを用意して、見逃してしまう可能性のある非常に小さなことを指摘してください。私に値を返した更新されたコードは次のようになります。

ドメインレイヤー(WorkflowService.csクラス)​​:

public BusinessEntity PerformAction(BusinessEntity request)
{
    //TryAction(System.Action action) basically wraps action in try catch and handles exceptions 
    TryAction(() =>
             {
                 _wcfClient.RequestSomething(ref request);
                 return request;
             });
}
4

2 に答える 2

3

オブジェクトをWCFサービスに渡すと、オブジェクトはシリアル化され、ネットワーク経由で送信されてから、サーバー上で逆シリアル化されます。この場合、「refによって」渡しても何も変更されません。サーバーが変更を加えた場合、呼び出し元に返送されることはありません。WCF呼び出しの戻り値のみがシリアル化され、返送されます。

データを返すためにWCFサービスが必要な場合は、それを戻り値にパッケージ化することをお勧めします。

于 2011-10-28T00:36:30.570 に答える
0

メソッドにref修飾子がありません。PerformAction

public void PerformAction(ref BusinessEntity request)
{
    TryAction(() => _wcfClient.RequestSomething(ref request));
}

ただし、この変更を行うと、コードをコンパイルできなくなります。次のエラーが発生します。

匿名メソッド、ラムダ式、またはクエリ式内でrefまたはoutパラメータ'request'を使用することはできません

それを機能させるには、次のようなことをする必要があります。

public void PerformAction(ref BusinessEntity request)
{
    var r = request;
    TryAction(() => _wcfClient.RequestSomething(ref r));
    request = r;
}

全体として、参照によって要求を渡すのは少し不安定なようです。新しい(または同じ)インスタンスを返し、外部レベルで割り当てを行う方がよいでしょう。

于 2011-10-28T01:24:10.160 に答える