首页 新闻 会员 周边

Error: ErrorCode<ERRPS008>:SubStatus<ES0001>:Error: Could not read installation path from registry.

0
悬赏园豆:50 [待解决问题]

求助,如果有哪位对Windows server AppFabric1.1比较熟悉的同学,知道此问题如何解决,还望留言告之。
 
目前我有一个Web应用程序,这个程序的功能就是管理Windows server Appfabric的。当然这在后台实际都是通过调用一个 appfabric的管理命令进行的。而这些命令我又是通过WF来实现,然后以WCF的方式发布出来,以供Web应用程序调用。之前我是使用的控制台应用程序Host整个 WCF服务,运行一直很正常。 后来,我改为部署都IIS上,通过Appfabric host功能进行部署时就会报“Error: ErrorCode<ERRPS008>:SubStatus<ES0001>:Error: Could not read installation path from registry.” 这样的错误。 此WCF服务的配置文件全文如下:
 
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"></compilation>
  </system.web>
  
  <system.serviceModel>
    <services>
        <service name="CacheHostService" behaviorConfiguration="netTcpServiceBehavior">
            <endpoint address="net.tcp://localhost:4533/Service/CacheHostService.xamlx" binding="netTcpBinding" bindingConfiguration="PortSharingBinding" contract="ICacheHostService">
            </endpoint>
            <endpoint address="net.tcp://localhost:4533/Service/CacheHostService.xamlx/mex" binding="mexTcpBinding" contract="IMetadataExchange"></endpoint>
        </service>
        
      <service name="CacheClusterService" behaviorConfiguration="netTcpServiceBehavior">
        <endpoint address="net.tcp://localhost:4533/Service/CacheClusterService.xamlx" binding="netTcpBinding" bindingConfiguration="PortSharingBinding" contract="ICacheClusterService">
        </endpoint>
        <endpoint address="net.tcp://localhost:4533/Service/CacheClusterService.xamlx/mex" binding="mexTcpBinding" contract="IMetadataExchange"></endpoint>
      </service>
     
      <service name="CacheService" behaviorConfiguration="netTcpServiceBehavior">
        <endpoint address="net.tcp://localhost:4533/Service/CacheService.xamlx" binding="netTcpBinding" bindingConfiguration="PortSharingBinding" contract="ICacheService">
        </endpoint>
        <endpoint address="net.tcp://localhost:4533/Service/CacheService.xamlx/mex" binding="mexTcpBinding" contract="IMetadataExchange"></endpoint>
      </service>
      <service name="ConfigCommandService" behaviorConfiguration="netTcpServiceBehavior">
        <endpoint address="net.tcp://localhost:4533/Service/ConfigCommandService.xamlx" binding="netTcpBinding" bindingConfiguration="PortSharingBinding" contract="IConfigCommandService">
        </endpoint>
        <endpoint address="net.tcp://localhost:4533/Service/ConfigCommandService.xamlx/mex" binding="mexTcpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="PortSharingBinding" portSharingEnabled="true">
          <security mode="None"></security>
        </binding>
      </netTcpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="netTcpServiceBehavior">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceAuthorization principalPermissionMode="None">
          </serviceAuthorization>
          <serviceThrottling maxConcurrentCalls="2000" maxConcurrentInstances="2000" maxConcurrentSessions="2000" />
          <serviceTimeouts transactionTimeout="00:10:00" />
        </behavior>
                <behavior name="">
                    <sqlWorkflowInstanceStore instanceCompletionAction="DeleteAll" instanceEncodingOption="None" instanceLockedExceptionAction="NoRetry" connectionStringName="ApplicationServerWorkflowInstanceStoreConnectionString" hostLockRenewalPeriod="00:00:30" runnableInstancesDetectionPeriod="00:00:05" />
                </behavior>
      </serviceBehaviors>
    </behaviors>
    <!---this code resolve the issue-->
    <serviceHostingEnvironment>
      <baseAddressPrefixFilters>        
        <add prefix="net.tcp://localhost:4533/Service/" />
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    <!--End above-->
  </system.serviceModel>
<!--runtime section let sub thread impersonation main thread policy-->
    <runtime>
        <legacyImpersonationPolicy enabled="false"/>
        <alwaysFlowImpersonationPolicy enabled="true"/>
    </runtime>
    
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
        <directoryBrowse enabled="true" />
  </system.webServer>
</configuration>
 
把具体命令传入Appfabric的核心代码如下:
 
internal static Collection<PSObject> InvokeCommand(this Runspace runSpace, string commandName, Dictionary<string, object> parameters = null)
        {
            Command command = new Command(commandName);
            if (parameters != null && parameters.Count > 0)
            {
                foreach (var item in parameters)
                {
                    command.Parameters.Add(item.Key, item.Value);
                }
            }
            WindowsIdentity winId = WindowsIdentity.GetCurrent();
            WindowsImpersonationContext ctx = null;
            Collection<PSObject> results = null; //shell.Invoke();
            try
            {
                using (ctx = winId.Impersonate())// this code will let the pipelin.invoke() run as main thread's right
                {
                    using (Pipeline pipeline = runSpace.CreatePipeline())
                    {
                        pipeline.Commands.Add(command);
                        results = pipeline.Invoke();//代码运行到此处时就报发错误
                    }
                }
            }
            catch (System.Exception objException)
            {
                // ctx.Undo();
                throw objException;
            }
            return results;
          
        }
在对服务的IIS配置中,我配置以ASP.NET V4.0的应用程序池运行,并且以新建了一个具有管理员权限账号运行此服务。
 
如果有谁知道如何解决,或者知道这里的错误原因是什么? 还请告之小弟。不胜感激呀。

lention的主页 lention | 初学一级 | 园豆:152
提问于:2012-05-08 10:45
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册