私はWCFが初めてで、次の質問があります。
1) 複数の小さな WCF サービスではなく、1 つの大きな WCF サービスを作成したい。これは、ファサード デザイン パターンの実装のようなものです。
なんで?クライアントのセッションを行う必要があり、クライアントに関する機密情報 (アクセス トークン、ユーザー名、API キー) を保存して検証する必要があります。このようにして、プライベートフィールドを作成するだけです:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class ApplicationService : IApplicationService
{
private string _accessToken;
private string _userName;
public OrderResponse GetOrder(OrderRequest request)
{
var response = new OrderResponse();
var result = Validate(request, response);
... other code
}
public CustomerResponse GetCustomer(CustomerRequest request)
{
var response = new CustomerResponse();
var result = Validate(request, response);
... other code
}
public LoginResponse Login(LoginRequest request)
{
var response = new LoginResponse();
var result = Validate(request, response);
... other code
}
public LogoutResponse Logout(LogoutRequest request)
{
var response = new LogoutResponse();
var result = Validate(request, response);
... other code
}
public bool Validate(BaseRequest request, BaseResponse response)
{
if(request.Token != _accessToken)
return false;
... validate other fields
return true
}
// many other methods
}
2) 他のすべての WCF サービスを含む 1 つの大きなサービスを作成するとします。また、ファサード デザイン パターンの実装のようなものです。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class ApplicationService : IApplicationService
{
private string _accessToken;
private string _userName;
private LoginService _loginService;
private CustomerService _customerService;
private OrderService _orderService;
public ApplicationService()
{
_loginService = new LoginService();
_orderService = new OrderService();
_customerService = new CustomerService();
}
public OrderResponse GetOrder(OrderRequest request)
{
var response = new OrderResponse();
var result = Validate(request, response);
if(!result) return Something;
return _orderService.GetOrder(request);
}
public CustomerResponse GetCustomer(CustomerRequest request)
{
var response = new CustomerResponse();
var result = Validate(request, response);
if(!result) return Something;
return _customerService.GetCustomer(request);
}
public LoginResponse Login(LoginRequest request)
{
var response = new LoginResponse();
var result = Validate(request, response);
if(!result) return Something;
return _loginService.Login(request);
}
public LogoutResponse Logout(LogoutRequest request)
{
var response = new LogoutResponse();
var result = Validate(request, response);
if(!result) return Something;
return _LoginService.Logout(request);
}
// many other methods
}
これについてどう思いますか?
3) もう 1 つの質問: 失敗を検証するとき、何を返す必要がありますか? FaultException
応答オブジェクトでエラー メッセージをスローするか、返すことができますか? グッドプラクティスとは?
ありがとう。