Предоставление службы WCF в качестве компонента COM + - PullRequest
2 голосов
/ 08 декабря 2011

Я работаю с клиентом, у которого есть несколько сайтов Classic ASP, но я хотел бы использовать кеширование AppFabric на этих сайтах, чтобы облегчить нагрузку, которую они в настоящее время имеют на свою базу данных.создание оболочки .NET для API AppFabric и предоставление ее веб-сайтам ASP в качестве COM-объекта.Этот метод работал, но вскоре они начали испытывать большое использование памяти, что приводило к краху их веб-сервера.Компонент COM размещен в области приложения сайта, так что это может быть большой частью проблемы.

Один из вариантов, который я придумал, - создание службы WCF и предоставление ее сайтам ASP какСервис COM +.К сожалению, мое знакомство с COM + на данный момент ограничено.Я полагаю, что этот сервис можно использовать с веб-сайтов ASP, но размещать его на других сайтах.Это также позволило бы мне тестировать производительность службы COM + независимо от веб-сайтов.

У меня возникают проблемы с подготовкой к началу документации для создания и публикации службы COM +.В документации MSDN, которую я прочитал, похоже, пропущены важные этапы процесса.

В качестве примера службы у меня есть следующее:

namespace TestComService
{
    [ServiceContract(SessionMode = SessionMode.Allowed, Namespace = "http://tempure.org/DD1F6C46-1A25-49CC-AA20-2D31A3D0C0AA", Name = "IService")]
    public interface IServiceContract
    {
        [OperationContract]
        string Get(string key);

        [OperationContract]
        void Set(string key, string value);
    }

    public class Service : IServiceContract
    {
        private readonly Dictionary<string, string> cache = new Dictionary<string, string>();

        public string Get(string key)
        {
            return cache[key];
        }

        public void Set(string key, string value)
        {
            cache.Add(key, value);
        }
    }
}

Конфигурация следующая:

<system.serviceModel>
  <bindings>
    <netNamedPipeBinding>
      <binding name="comNonTransactionalBinding"/>
    </netNamedPipeBinding>
  </bindings>
  <comContracts>
    <comContract contract="{DD1F6C46-1A25-49CC-AA20-2D31A3D0C0AA}" name="IService" namespace="http://tempure.org/DD1F6C46-1A25-49CC-AA20-2D31A3D0C0AA" requiresSession="true">
      <exposedMethods>
        <add exposedMethod="Get"/>
        <add exposedMethod="Set"/>
      </exposedMethods>
    </comContract>
  </comContracts>
  <services>
    <service name="{3957AA9E-4671-4EF0-859B-1E94F9B21BEE},{5D180F85-65D8-4C0C-B5D6-9D28C59E29AE}">
      <endpoint address="IService" binding="netNamedPipeBinding" bindingConfiguration="comNonTransactionalBinding" contract="{DD1F6C46-1A25-49CC-AA20-2D31A3D0C0AA}"/>
      <host>
        <baseAddresses>
          <add baseAddress="net.pipe://localhost/TestComService"/>
        </baseAddresses>
      </host>
    </service>
  </services>
</system.serviceModel>

Я все еще немного запутался в том, что касается хостинга.Может ли это быть размещено в IIS или мне нужно создать отдельную службу для размещения в ней?

Еще раз, я открыт для любых предложений или предложений, которые может предоставить кто-то с большим опытом в этом вопросе.

1 Ответ

0 голосов
/ 20 декабря 2011

Мы используем COM +, вызываемый напрямую из веб-службы и службы WCF.Я не думаю, что вам нужно использовать оболочку WCF, вызванную из вашего приложения ASP.NET, для использования компонента COM +, если он не будет работать на другом сервере.

Вам необходимо установить компонент COM + отдельно отВеб-приложение на сервере.Он должен быть зарегистрирован в GAC .Вы создаете ссылку на COM + объект / файл DLL в вашем приложении ASP.NET.Когда вы вызываете файл DLL, он использует развернутый объект, зарегистрированный в GAC, который вызывает зарегистрированный объект COM +.

У нас были некоторые проблемы с собственным установщиком .NET.Он не всегда правильно регистрирует компонент COM +.Поэтому я написал простой командный файл, который делает эту работу.Вот код партии.Я внедряю regsvsc.exe с приложением, чтобы он всегда знал, где его найти.

regsvcs /fc MYCOM+.DLL
...