2009-07-17 28 views
1

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

当我通过.svc文件在IIS中托管服务时,其中两个文档正常工作,第三个文档弹出,它开始使用OpenXml Sdk构造Word文档,但随后死亡。我认为这与IIS有关,但我无法指责它。

我生成的文件总共有三种类型。简而言之,它是如何工作的

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

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

Word文档不大于100KB。

我也使用basicHttpBinding,虽然我已经尝试wsHttpBinding具有相同的结果。

令人惊讶的是,它在本地有多快,甚至更多的文件生成得很好,它是拒绝工作的第三种文档类型。

于错误消息:

而接收到HTTP响应http://myservername.mydomain.inc/MyService/Service.Svc时发生错误。这可能是由于服务端点绑定不使用HTTP协议。这也可能是由于HTTP请求上下文被服务器中止(可能是由于服务器关闭)。查看服务器日志获取更多详细信

我花了最后2天试图弄清楚是怎么回事,我已经尝试了一切,包括改变maxReceivedMessageSize,MAXBUFFERSIZE,maxBufferPoolSize,等等等等,以较大的值,我甚至包括:

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

看到,也许如果IIS因此窒息。

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

当我在IIS上托管它,我试图让Windows窗体应用程序来调用它,我得到的错误。

我知道你会问日志,所以是的,我的主机上启用了日志记录功能。

而且有在日志中没有错误,我记录了一切。

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

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

从日志看来,在调用HisOperation1和HisOperation2之后,该服务刚刚进入la-la land模式,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运行时错误。

任何帮助表示赞赏,缺乏睡眠正在让我。

帮助我Obi-Wan Kenobi,你是我唯一的希望。

+0

只是为了确保:您知道ASP.NET Health Monitoring会将未处理的异常记录为警告,而不是错误? – 2009-07-17 10:19:01

+0

我使用WCF跟踪当我说日志时,对不起,如果我不清楚.. :( – kd7 2009-07-17 12:21:24

回答

0

是的,我们会想要日志,或者至少想一想你在记录什么。我假设你在WCF级别有消息和传输日志记录。

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

尝试在KB919789

1

我有这个消息出现:

错误而接收到HTTP响应http://myservername.mydomain.inc/MyService/Service.Svc发生。这可能是由于服务端点绑定不使用HTTP协议。这也可能是由于HTTP请求上下文被服务器中止(可能是由于服务器关闭)。查看服务器日志获取更多详细信

而问题是我试图转移的对象不是[Serializable]。我试图转移的对象是DataTable。

我相信你试图传输的单词文件也是不可序列化的,因此可能是问题所在。

0

我在我的WCF服务中使用IEnumerable<T> DataMember时有同样的错误。结果发现在某些情况下,我返回IQueryable<T>作为IEnumerable<T>,所以我只需要将.ToList<T>()添加到我的LINQ语句中。

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