这个问题已经打败了我在谷歌的尝试,所以这里。我们在从WCF服务获取数据时遇到问题(只是查找数据,因此我们为HTTP GET请求启用了它)。每次进入它都将返回404.堆栈跟踪 NOT 似乎在混合中有WCF - StaticFileHandler似乎正在尝试提供它。
我在ASP.NET 3.5 SP1上创建了一个示例WCF服务,并且能够重现该问题。这是我的示例服务 - 此时与库存WCF的唯一区别是AspNetCompatibilityRequirements以及WebScript和HTTP GET的启用:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public string DoWork(string param1)
{
System.Threading.Thread.Sleep(150);
return "bar";
}
}
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebGet]
string DoWork(string param1);
}
服务配置:
<service name="namespace.Service1">
<endpoint
behaviorConfiguration="WebScriptEnabled"
address="http://localhost:2961/svc/Service1.svc"
binding="webHttpBinding"
contract="namespace.IService1">
</endpoint>
</service>
行为配置:
<behaviors>
<endpointBehaviors>
<behavior name="WebScriptEnabled">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
我的节点有aspNetCompatibilityEnabled =“true”&gt ;,但是其他一切都是OOB。我根本没有关于webHttpBinding的自定义。
如果我在VS 2008上使用内置的Web服务器F5并点击URL,那么第一个请求将导致404.如果我继续点击它甚至轻载(7-10个同时请求),我会得到一些404错误。
如果我然后让负载下降到空,并重新运行我的测试,我可以轻松地同时发送50个没有任何错误。
我真正的服务比这复杂得多,但事实上我可以得到一个(几乎)股票样本来表明这种行为,这似乎有可能存在与框架相关的问题。我已启用WCF诊断和跟踪,但日志中没有显示任何内容(这并非意外,因为当404发生时WCF不在堆栈跟踪中)。
我希望我做错了什么并且没有发现框架错误。我的生产环境是IIS6,似乎表现出与我的开发服务器相同的行为。