我的WebService使用ms字COM來比較2個.doc文件。當結果文件將超過1 Mb時 - 它會掛起。 (對於較小的文件 - 一切正常)。 當我在IIS上發佈&運行WebService時發生這種情況。 (Host win 2008 x64,IIS - 7) 因此,Word COM作爲COM參考添加到Service中。我不得不在那裏安裝ms word 2010 x64,否則服務會拋出null ref異常。Web服務MS Word比較自動化導致凍結
在我的本地comp(在VS調試模式下),在win 7和office 2010 32位下,一切正常。
詳細信息:我使用JS調用Web服務:
function post_to_url() {
var path = "http://localhost:32496/Service1.asmx/runCompareService";
var params = {'mAuthToken':'xU/fnlKCe85R25I8IIRHIQCmPc7rcajYVHLQ3JChv8w=','documentId':'1441378','origVerNum':'1','revisedVerNum':'2'};
var method = "post";
var form = document.createElement("form");
form.setAttribute("method", method);
form.setAttribute("action", path);
for(var key in params) {
if(params.hasOwnProperty(key)) {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", key);
hiddenField.setAttribute("value", params[key]);
form.appendChild(hiddenField);
}
}
document.body.appendChild(form);
form.submit();
}
C#比較方法:
public void doCompare(String file1path, String file2path, String file3path)
{
Microsoft.Office.Interop.Word.Application wordApp = null;
Microsoft.Office.Interop.Word.Document doc1 = null;
Microsoft.Office.Interop.Word.Document doc2 = null;
Microsoft.Office.Interop.Word.Document doc = null;
object wordTrue = (object)true;
object wordFalse = (object)false;
object missing = Type.Missing;
object fileToOpen = @file1path;
object fileToOpen1 = @file2path;
object fileToSave = @file3path;
try
{
wordApp = new Microsoft.Office.Interop.Word.Application();
wordApp.Visible = false;
wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
try
{
doc1 = wordApp.Documents.Open(ref fileToOpen, ref missing, ref wordFalse, ref wordFalse, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref wordTrue, ref missing,
ref missing, ref missing, ref missing);
}
catch (Exception e)
{
throw new Exception("Failed to open approved file" + e.ToString());
}
try
{
doc2 = wordApp.Documents.Open(ref fileToOpen1, ref missing, ref wordFalse, ref wordFalse, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
}
catch (Exception e)
{
throw new Exception("Failed to open revised file" + e.ToString());
}
if ((doc1 != null) && (doc2 != null))
{
try
{
doc = wordApp.CompareDocuments(doc1, doc2, WdCompareDestination.wdCompareDestinationOriginal, WdGranularity.wdGranularityWordLevel,
true, true, true, true, true, true, true, true, true, true, "", false);
doc.SaveAs2(fileToSave);
((_Document)doc).Close();
}
catch (Exception e)
{
throw new Exception("Failed to save compare result file" + e.ToString());
}
}
}
catch (Exception e)
{
throw new Exception("Failed to open MS Word Application" + e.ToString());
}
finally
{
((_Application)wordApp).Quit();
}
}
響應更改爲:
private void DownloadToBrowser(String filePath)
{
FileInfo file = new FileInfo(filePath);
byte[] fileBytes = ReadFile(filePath);
Context.Response.Clear();
Context.Response.ClearHeaders();
Context.Response.ClearContent();
Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Context.Response.AddHeader("Content-Length", file.Length.ToString());
Context.Response.AddHeader("Connection", "close");
Context.Response.ContentType = "application/msword";
Context.Response.ContentEncoding = Encoding.UTF8;
Context.Response.OutputStream.Write(fileBytes, 0, fileBytes.Length);
Context.Response.Flush();
Context.ApplicationInstance.CompleteRequest();
}
它看起來像服務掛起COM比較操作
try
{
doc = wordApp.CompareDocuments(doc1, doc2, WdCompareDestination.wdCompareDestinationOriginal, WdGranularity.wdGranularityWordLevel,
true, true, true, true, true, true, true, true, true, true, "", false);
doc.SaveAs2(fileToSave);
((_Document)doc).Close();
}
catch (Exception e)
{
throw new Exception("Failed to save compare result file" + e.ToString());
}
有人可以幫忙嗎?
的可能重複[使用辦公asp.net web服務2010 COM(http://stackoverflow.com/questions/7382704/asp-net-web使用-service-辦公室-2010-COM) –