シナリオは次のとおりです。
「BusinessService」と呼ぶWCFサービスがあります。
このサービスのクライアントがリクエストを送信するWebアプリもあります。
自分のサービスに更新を送信しているユーザーをログに記録できるようにしたい。このため、私のBusinessServiceには_userIDというプライベート文字列メンバーとこの_userIDを設定するメソッドがあり、このクラスは次のようになります。
public class BusinessService : IBusinessService
{
private string _userID;
public void SetUserID(string userID)
{
_userID = userID;
}
public void UpdateCustomer(Customer customer)
{
// update customer here.
}
}
上記のクラスの記述方法が原因で(userIDを渡すだけのWCFサービス用のカスタムcustructorを作成するのは簡単ではないため)、私のWebアプリは次のように記述されます。
public class WebApp
{
private string _userID; // on page load this gets populated with user's id
// other methods and properties
public void btnUpdateCustomer_Click(object sender, EventArgs e)
{
Customer cust = new Customer();
// fill cust with all the data.
BusinessServiceClient svc = InstantiateWCFService();
svc.UpdateCustomer(cust);
svc.Close();
}
private BusinessServiceClient InstantiateWCFService()
{
BusinessServiceClient client = new BusinessServiceClient("EndPointName");
client.SetUserID(_userID);
return client;
}
}
保存されているデータを見ると、ユーザーIDには何も保存されていません。
サービスがすべてのメソッド呼び出しでuserIDを要求することなく、変更を加えているユーザーをログに記録できる何らかの形式のデザインパターンまたは機能はありますか?