[return]
結果を見つける方法を指定する属性が必要です。
で、を返送するかSendReplyToReceive
、を返送するMessage
かを選択できますParameters
。私の経験では、選択する必要がありますParameters
が、返送するのは1つだけです。戻りパラメーターに「result」という名前を付けるとすると、インターフェースコントラクトに次の属性が必要になります。
[return: MessageParameter(Name = "result")]
これが私の1つの完全な例です。
namespace NewOrbit.ExVerifier.Model.Workflow.Case
{
using System;
using System.ServiceModel;
using NewOrbit.ExVerifier.Model.Workflow;
[ServiceContract(Namespace = "urn://exverifier.neworbit.co.uk/")]
public interface ICaseWorkflow
{
[OperationContract(Action = "urn://exverifier.neworbit.co.uk/NewOrbit.ExVerifier.Model.Workflow.Case.ICaseWorkflow/Start",
ReplyAction = "urn://exverifier.neworbit.co.uk/NewOrbit.ExVerifier.Model.Workflow.Case.ICaseWorkflow/StartReply")]
[return: MessageParameter(Name = "result")]
WorkflowInstanceIdentifier Start(int caseID);
[OperationContract(Action = "urn://exverifier.neworbit.co.uk/NewOrbit.ExVerifier.Model.Workflow.Case.ICaseWorkflow/ApplicationStateChanged",
ReplyAction = "urn://exverifier.neworbit.co.uk/NewOrbit.ExVerifier.Model.Workflow.Case.ICaseWorkflow/ApplicationStateChangedReply")]
[return: MessageParameter(Name = "result")]
bool ApplicationStateChanged(Guid instanceID, int applicationID);
[OperationContract(Action = "urn://exverifier.neworbit.co.uk/NewOrbit.ExVerifier.Model.Workflow.Case.ICaseWorkflow/Cancel",
ReplyAction = "urn://exverifier.neworbit.co.uk/NewOrbit.ExVerifier.Model.Workflow.Case.ICaseWorkflow/CancelReply")]
[return: MessageParameter(Name = "result")]
bool Cancel(Guid instanceID);
}
}
ちなみに、あなたの例では、OperationContractを指定しないことでどのように回避できるかわかりませんが、それは素晴らしいことです。指定する必要のある形式がコントラクトとワークフローで異なるため、これらは非常に苦痛です。
また、わからない場合に備えて、非常に微妙なバグが発生する可能性があります。渡したパラメーターは名前で認識されるため、インターフェースのインバウンドパラメーターに指定する名前がワークフロー。あなたがそれについて考えるとき明らかですが、あなたを捕まえることができます。ああ、誤解を招くエラーメッセージで壊れてしまうので、長すぎるメソッド名は避けてください。