Я конвертирую некоторые изображения в слайд ppt и загружаю ppt после его завершения.с помощью Microsoft.Office.Interop.PowerPoint.пока я запускаю приложение, оно работает как положено, но при развертывании на той же машине IIS выдает следующую ошибку.
PreparePPT: System.Runtime.InteropServices.COMException (0x80010001): Не удалось получить фабрику классов COM для компонента с CLSID {91493441-5A91-11CF-8700-00AA0060263B} из-за следующей ошибки: 80010001Вызов был отклонен вызываемым абонентом.(Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)).в System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject (RuntimeType objectType) в System.Runtime.Remoting.Activation.ActivationServices.CreateInstance (RuntimeType serverType) в System.Runtime.Rutification.TypeTimes., булева bNewObj) при System.RuntimeTypeHandle.CreateInstance (типа RuntimeType, Boolean, Boolean publicOnly NOCHECK, Boolean & canBeCached, RuntimeMethodHandleInternal & CTOR, Boolean & bNeedSecurityCheck) в System.RuntimeType.CreateInstanceSlow (Boolean publicOnly, булевой skipCheckThis, булевой fillCache, StackCrawlMark & stackMark) в системе.RuntimeType.CreateInstanceDefaultCtor (логическое значение publicOnly, логическое значение skipCheckThis, логическое значение fillCache, StackCrawlMark & stackMark) в System.Activator.CreateInstance (тип-тип, логический тип-непубличный) в System.Activator.CpletePortPtoTentInstImageDetails) в D: \ Project \ ExporttoPPT \ appWebService.asmx.cs: строка 293
Я передал привилегии NETWORK SERVICES для доступа к удаленному запуску, активации.Но все же я получаю ту же ошибку.Мой пример кода
public string PreparePPT(List<ImageDetails> ImageDetails)
{
try
{
string path = "//FilesStorage//TempFiles//";
string fileName = "Dashboard.pptx";
string fullPath = Server.MapPath(path + fileName);
Microsoft.Office.Interop.PowerPoint.Application pptApplication = new Microsoft.Office.Interop.PowerPoint.Application();
Microsoft.Office.Interop.PowerPoint.Slides slides;
Microsoft.Office.Interop.PowerPoint.Slide slide;
Microsoft.Office.Interop.PowerPoint.TextRange objText;
Microsoft.Office.Interop.PowerPoint.Presentation pptPresentation = pptApplication.Presentations.Add(Microsoft.Office.Core.MsoTriState.msoTrue);
int inCount = 1;
foreach (var item in ImageDetails)
{
string strImgPath = Server.MapPath("Images");
string base64 = item.Data.Split(',')[1];
byte[] bytes = Convert.FromBase64String(base64);
System.Drawing.Image image;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = System.Drawing.Image.FromStream(ms);
strImgPath = Server.MapPath("//FilesStorage//TempFiles//") + "Image_" + inCount + ".png";
image.Save(strImgPath);
item.ImagePath = strImgPath;
ms.Close();
}
Microsoft.Office.Interop.PowerPoint.CustomLayout customLayout = pptPresentation.SlideMaster.CustomLayouts[Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText];
// Create new Slide
slides = pptPresentation.Slides;
slide = slides.AddSlide(inCount, customLayout);
// Add title
objText = slide.Shapes[1].TextFrame.TextRange;
objText.Text = item.Title;
objText.Font.Name = "Arial";
objText.Font.Size = 22;
objText = slide.Shapes[2].TextFrame.TextRange;
Microsoft.Office.Interop.PowerPoint.Shape shape = slide.Shapes[2];
slide.Shapes.AddPicture(item.ImagePath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, shape.Left, shape.Top, shape.Width, shape.Height);
inCount++;
}
pptPresentation.SaveAs(fullPath, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsDefault, Microsoft.Office.Core.MsoTriState.msoTrue);
pptPresentation.Close();
pptApplication.Quit();
foreach (var item in ImageDetails)
{
if (File.Exists(item.ImagePath))
{
File.Delete(item.ImagePath);
}
}
return fullPath;
}
catch (Exception ex)
{
return "Error Occured: PreparePPT - " + ex.Message.ToString();
}
}
Любая помощь будет высоко оценена.