2010-08-30 85 views
1

我有一个完美工作了3个月的WCF服务。它由托管WCF服务和本地网络客户端的同一台服务器上的本地客户端使用。它使用SSL和基本身份验证来确保安全性。为什么SSL /基本认证WCF服务开始投掷404?

几天前,本地客户端(本地网络客户端不受影响)在尝试使用该服务时就开始收到404错误。我可以在托管WCF的服务器上打开浏览器并查看WSDL,甚至可以调用“put”命令并获得预期的“方法不允许”。我已确认托管服务器没有进行任何软件或硬件更改。我已确认SSL密钥有效。我已经确认应用程序池的权限是足够的。我已确认没有防火墙正在运行。唯一奇怪的是IIS日志显示第一篇文章不包含基本认证用户。但是,日志中的下一行会显示200响应。我不完全确定日志不正常。见下文。我希望有人能给我另一个地方去研究以找到问题。请告诉我。

2010-08-28 10:30:03 192.168.100.100 POST /protected/Service_Name_Here.svc/put - 443 - 192.168.100.100 - 401 2 5 2 
2010-08-28 10:30:03 192.168.100.100 POST /protected/Service_Name_Here.svc/put - 443 User_Name_Here 192.168.100.100 - 200 0 0 5 

编辑:引发错误的本地客户端正在传输大文件到WCF服务。本地网络客户端正在传输小文件,而不是抛出错误。我发现这link,这表明默认transferMode =“缓冲”将为20 MB以上的文件投掷404。此人的修正是更改transferMode =“Streamed”。但是,“流”设置只允许1参数传递给WCF服务。我有多个参数,所以我需要找到“缓冲”模式的修复。

+0

如果您从浏览器执行操作,日志可能是正确的,因为浏览器首先发送请求而不进行身份验证,然后它会收到401并显示基本凭证的窗口。它使用提供的凭证重新发送请求。 – 2010-08-30 20:06:30

回答

0

此人的修复方法是更改​​transferMode =“Streamed”。但是,“流”设置只允许1参数传递给WCF服务。我有多个参数,所以我需要找到“缓冲”模式的修复。

听起来像这是正确的修复,但要注意的是,流模式需要自定义消息合约;您不能使用WCF作为默认操作推送的“RPC”样式。如果您需要在流模式传输中提供多个参数,只需将它们添加到您的自定义消息合约中即可。

Here's a nice discussion on the subject from Microsoft。

0

如果你有邮件大小问题,要知道,有3个级别的配置接受请求大小为IIS:

预设最高请求大小

如果WCF拒绝你的消息,你可能会意识到完全错误,但对于ASP.NET和IIS,你将得到完全HTTP 404.

除非您更改操作,否则流式处理将无法帮助您。