我正在与拥有多个经典ASP网站的客户合作,但希望在这些网站中使用AppFabric缓存来帮助减轻他们目前在数据库上的负担。
我们使用的第一种方法是为AppFabric API创建一个.NET包装器,并将其作为COM对象公开给ASP网站。这种方法很有效,但他们很快就开始遇到崩溃他们的网络服务器的高内存使用率。 COM组件托管在站点的应用程序范围内,因此可能是问题的重要部分。
我提出的一个选项是创建一个WCF服务并将其作为COM +服务公开给ASP站点。不幸的是,此时我对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中托管,还是我需要创建一个单独的服务来托管?
再一次,我愿意接受任何建议,或者输入有更多经验的人提供。
答案 0 :(得分:0)
我们使用直接从Web服务和WCF服务调用的COM +。我不相信您需要使用从ASP.NET应用程序调用的WCF包装器来使用COM +组件,除非它将在不同的服务器上运行。
您需要在服务器上与Web App分开安装COM +组件。它必须在GAC中注册。您在ASP.NET应用程序中创建对COM +对象/ DLL文件的引用。当您调用DLL文件时,它使用在GAC中注册的已部署对象,该对象调用已注册的COM +对象。
我们在本机.NET安装程序中遇到了一些问题。它并不总是正确注册COM +组件。所以我写了一个简单的批处理文件来完成这项工作。这是批处理代码。我使用应用程序部署regsvsc.exe,因此它总是知道在哪里找到它。
regsvcs /fc MYCOM+.DLL