Я работаю со службами Reporting Services и Sharepoint, у меня есть приложение, которое использует службы отчетов, однако клиент хотел бы, чтобы наше приложение было интегрировано в sharepoint. В настоящее время мы тесно связаны с веб-сервисом ReportService.asmx, который предоставляет различные методы для выполнения операций. В службах Reporting Services есть то, что называется «режим интеграции Sharepoint», при включении сервер отчетов работает по-другому, а Sharepoint используется для управления отчетами. Sharepoint добавляет новый веб-сервис под названием ReportService2006.asmx, который почти такой же.
Теперь наше приложение использует веб-ссылку на ReportService и использует различные объекты, предоставляемые службой. ReportService2006 имеет точно такие же объекты, но они, очевидно, находятся в другом пространстве имен, например, у меня есть 2 веб-ссылки - по 1 на каждый сервис, поэтому есть объект MyApplication.ReportService.CatalogItem и еще один MyApplication.ReportService2006.CatalogItem.
Я пытался использовать внедрение зависимостей для извлечения Сервиса из нашего приложения в сочетании с фабричным шаблоном, чтобы определить, какую реализацию моего интерфейса создать. Вот мой интерфейс. Я упростил его, включив в него только те звонки, которые мне нужны для этого приложения.
using System;
using NetworkUserEncrypt.ReportService;
namespace MyApplication.Service
{
public interface IReportingService
{
CatalogItem CreateDataSource(string DataSource, string Parent, bool Overwrite, DataSourceDefinition Definition, Property[] Properties);
void DeleteItem(string Item);
DataSourceDefinition GetDataSourceContents(string DataSource);
byte[] GetReportDefinition(string Report);
CatalogItem[] ListChildren(string Item);
}
}
Итак, у меня есть две реализации этого, каждая из которых создает отдельный веб-сервис, например:
namespace MyApp.Service.Implementation
{
class ReportingServiceImpl : IReportingService
{
ReportingService _service = null;
public ReportingServiceImpl()
{
ReportingService _service = new ReportingService();
}
/* SNIP */
}
}
и
namespace MyApp.Service.Implementation
{
class ReportingService2006Impl : IReportingService
{
ReportingService2006 _service = null;
public ReportingService2006Impl()
{
ReportingService2006 _service = new ReportingService2006();
}
/* SNIP */
}
}
Так что план в том, чтобы я мог добавить их в мой ServiceWrapper во время выполнения. Однако - если вы заметите, что интерфейс привязан к ReportService, а некоторые методы возвращают объекты, которые взяты из веб-ссылки, например, CatalogItem. Таким образом, мой проект не будет построен, потому что моя реализация ReportService2006 ссылается на CatalogItem из другого пространства имен.
Есть идеи? Я иду в совершенно неверном направлении с этим?