WCF服务中的表达式编码器4

时间:2014-05-23 21:50:54

标签: c# wcf expression-encoder-sdk

我正在尝试编写将在IIS 8中运行的WCF服务,并使用Expression Encoder SDK打开视频文件,然后将其编码为WMV。以下代码在我之前写的桌面应用程序中工作正常。

Job job = new Job();
job.ApplyPreset(Preset.FromFile(HttpRuntime.AppDomainAppPath + "Profiles\\" + profile + ".xml"));
job.CreateSubfolder = false;
job.SaveJobFileToOutputDirectory = false;
job.OutputDirectory = Path.GetDirectoryName(input);
MediaItem item;
item = new MediaItem(input);
item.OutputFileName = "{Original file name}.wmv";
job.MediaItems.Add(item);

job.EncodeProgress += new EventHandler<EncodeProgressEventArgs>(job_EncodeProgress);
job.EncodeCompleted += new EventHandler<EncodeCompletedEventArgs>(job_EncodeCompleted);
job.Encode();

但是当我尝试在IIS上运行的WCF服务中运行此代码时,我收到以下错误

The type initializer for 'Microsoft.Expression.Encoder.SkuManager' threw an exception.
at Microsoft.Expression.Encoder.SkuManager.IsFeaturedSupported(Feature feature)
at MS.Internal.Expression.Encoder.FastProperties.FastPropertyCreate.ShouldAddProp(IFastProperty property, PropertyType propType)
at MS.Internal.Expression.Encoder.FastProperties.FastPropertyCreate.CreatePropertiesArray[T](Type classType, PropertyType propType)
at MS.Internal.Expression.Encoder.FastProperties.FastPropertyCreate.GetProperties[T](PropertyType propType)
at MS.Internal.Expression.Encoder.Persistence.JobPersistence.GetJobFilePropertiesCore[T](JobPropertiesMode mode)
at MS.Internal.Expression.Encoder.Persistence.JobPersistence.GetJobFileProperties[T](JobPropertiesMode mode)
at Microsoft.Expression.Encoder.JobBase.CreateDefaultValues(JobBase job)
at Microsoft.Expression.Encoder.JobBase..ctor()
at Microsoft.Expression.Encoder.Job..ctor()

我可以在服务器上的常规桌面应用程序中运行此代码,但不能在同一台计算机上运行的WCF服务中运行。

2 个答案:

答案 0 :(得分:0)

事实证明这是IIS中的权限问题。

为了让任何程序使用Expression Encoder SDK,它需要在一个可以访问机器上安装的Expression Encoder程序的标识下运行。

因此,在IIS中,运行WCF服务的“ApplicationPoolIdentity”标识无权启动“管理员”帐户安装在计算机上的Expression Encoder程序。

要解决此问题,您可以执行以下两项操作之一。

  1. 安装Expression Encoder时,允许“所有用户”启动它。

  2. 在IIS上安装WCF服务时,请确保它在可以启动Expression Encoder的应用程序池中运行

答案 1 :(得分:0)

我在iis8网站上遇到了同样的问题(没有托管任何wcf服务),是的,我还发现IIS需要在可以执行表达式编码器的权限下运行。但有一天它停止工作并开始抛出同样的错误:

"The type initializer for 'Microsoft.Expression.Encoder.SkuManager' threw an exception."

尽管AppPool的身份很好。我把头发拉了一天左右,然后意识到VS复制到本地bin目录的二进制文件不想在IIS中运行。不知何故腐败或dll与表达式的安装不匹配???我不得不删除bin目录的内容,然后VS替换它们,它工作。将CopyLocal设置为false对于那些引用不起作用(可以想象,从gac中使用它可能会很好)。