1

我有一个 WCF 服务,它执行一些文档转换并将文档返回给调用者。在我的本地开发服务器上进行本地开发时,该服务托管在 ASP.NET 开发服务器上,控制台应用程序调用该操作并在几秒钟内执行。

当我通过 .svc 文件在 IIS 中托管服务时,其中两个文件正常工作,第三个文件被炸毁,它开始使用 OpenXml Sdk 构建 word 文档,但随后就死了。我认为这与 IIS 有关,但我不能指望它。

我一共生成了三种类型的文档。简而言之,这就是它的工作原理

SQL 2005 DB/IBM DB2 -> 由其他开发人员编写的 WCF 服务以公开数据。此服务只有一个使用 basicHttpBinding 的端点

My Service 调用他的服务,获取相关数据,使用 Open Xml Sdk 生成 Microsoft Word 文档,将其保存在服务器上并将路径返回给用户。

word文档不超过100KB。

我也在使用 basicHttpBinding,尽管我尝试了 wsHttpBinding 的结果相同。

令人惊奇的是它在本地的速度有多快,而且其中两个文档生成得很好,它的第三种文档类型拒绝工作。

到错误信息:

接收对http://myservername.mydomain.inc/MyService/Service.Svc的 HTTP 响应时发生错误。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务器关闭)。有关更多详细信息,请参阅服务器日志。

在过去的 2 天里,我一直在试图弄清楚发生了什么,我已经尝试了一切,包括将 maxReceivedMessageSize、maxBufferSize、maxBufferPoolSize 等更改为较大的值,我什至包括:

 <httpRuntime maxRequestLength="2097151" executionTimeout="120"/>

看看 IIS 是否因此而窒息。

以编程方式,该服务没有什么特别之处,它只是使用 Open Xml Sdk 从数据中构造单词文档,就像我说的,当通过在 asp.net 开发服务器上本地运行的控制台应用程序调用时,所有 3 个文档在本地工作,即http: //localhost:3332/myService.svc

当我在 IIS 上托管它并尝试让 Windows 窗体应用程序调用它时,我收到错误消息。

我知道您会要求提供日志,所以是的,我在我的主机上启用了日志记录。

日志中没有错误,我正在记录所有内容。

基本上我调用另一个开发人员编写的两个服务操作。

MyOperation 调用 -> HisOperation1 然后是 HisOperation2,这两个调用都给了我复杂的类型。明天我要看看他的代码,因为他正在使用 LINQ2SQL,并且那里可能会发生一些有趣的事情。他正在使用各种集合等,但事实上我可以运行完全相同的文档,当服务在 ASP WebDev 服务器上本地托管时,让我们在几秒钟内将其称为“文档 3”,这是最奇怪的,为什么会它在缩小的 Cassini 上运行并在 IIS 上炸毁?

从日志看来,在调用 HisOperation1 和 HisOperation2 后服务刚刚进入 la-la 地死机,Windows 事件日志中有一个应用程序池 (w3wp.exe) 错误。

Faulting application w3wp.exe, version 6.0.3790.1830, stamp 42435be1, faulting module kernel32.dll, version 5.2.3790.3311, stamp 49c5225e, debug? 0, fault address 0x00015dfa.

它被归类为 .NET 2.0 运行时错误。

任何帮助表示赞赏,睡眠不足对我来说很重要。

帮助我欧比旺克诺比,你是我唯一的希望。

4

4 回答 4

1

我出现了这条消息:

接收对http://myservername.mydomain.inc/MyService/Service.Svc的 HTTP 响应时发生错误。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务器关闭)。有关更多详细信息,请参阅服务器日志。

问题是我试图传输的对象不是 [Serializable]。我试图传输的对象是 DataTable。

我相信您尝试传输的 word 文档也是不可序列化的,因此这可能是问题所在。

于 2011-09-05T15:11:28.567 回答
0

是的,我们需要日志,或者至少对您正在记录的内容有所了解。我假设您在 WCF 级别同时登录了消息和传输日志。

要看的一件事是权限。当您在 Cassini 下运行时,Web 服务器正在以当前登录的用户身份运行。这隐藏了任何 SQL 或 CAS 权限问题(老实说,您的帐户通常是本地管理员)。一旦您发布到 IIS,您现在就在应用程序池用户下运行,默认情况下,该用户受到更多限制。

尝试打开 IIS 调试转储并按照KB919789中的步骤操作

于 2009-07-17T05:37:47.503 回答
0

仅供参考,我将IIS 6 更改为在 IIS 5.0 隔离模式下工作,一切正常。奇怪的。

于 2009-07-17T17:10:52.157 回答
0

在我的 WCF 服务中使用IEnumerable<T>DataMember 时,我遇到了同样的错误。结果发现,在某些情况下,我返回的是一个IQueryable<T>as IEnumerable<T>,所以我所要做的就是添加.ToList<T>()到我的 LINQ 语句中。

我将其更改IEnumerable<T>IList<T>以防止再次犯同样的错误。

于 2015-03-11T09:46:01.887 回答