Мой вопрос: где хранить имена хранимых процедур?
На уровне доступа к данным, который находится в вашем сервисном проекте WCF.Приложение ASP.NET MVC 3 только вызывает метод для этой службы.Помните, что приложение ASP.NET MVC не знает, что такое база данных, и тем более, что такое хранимая процедура.Приложение ASP.NET MVC работает только с моделями, контроллерами и представлениями.
Таким образом, в вашем сервисном проекте WCF у вас будет контракт на обслуживание:
[ServiceContract]
public interface IMyService
{
SomeModel Get(int id);
}
, тогда вы можете иметь реализацию вслужба WCF, которая будет отправлять и извлекать данные, где бы они ни хранились (в вашем случае это будет база данных SQL, а способ извлечения этих данных - это вызов хранимой процедуры):
public class MyService: IMyService
{
public SomeModel Get(int id)
{
// here you can call the stored procedure and return the corresopnding model
...
}
}
Очевидно, этобудет тесно связывать ваш уровень обслуживания с данной технологией доступа к данным.Чтобы отделить его, вы могли бы установить другой уровень абстракции между службой и фактическим доступом к данным:
public class MyService: IMyService
{
private readonly IMyRepository _repository;
public MyService(IMyRepository repository)
{
_repository = repository;
}
public SomeModel Get(int id)
{
// you could do additional things in the service method
// like validating the arguments, call data access methods, ...
return _repository.Get(id);
}
}
, и фактический вызов хранимой процедуры будет выполняться в конкретной реализации SQL репозитория, которая будетвнедряется в вашу службу вашей DI-инфраструктурой.
В приложении ASP.NET MVC вы будете использовать службу WCF только из строго типизированного клиентского прокси-сервера, сгенерированного для вас при добавлении ссылки на службу.