[英]Placing WCF service in folder throws 404
我是WCF的新手,并且遇到了以下问题。
我有一个带有webHttpBinding
的WCF服务,并托管在IIS上。 我的项目类型是WCF应用程序。 服务文件Test.svc
在根文件夹中。
我可以从链接http://localhost/WOFAPI/Test.svc
。 到现在为止还挺好。 但是,当我将同一服务放在文件夹下时,说“ Test1”并尝试从链接http://localhost/WOFAPI/Test.svc
访问将抛出404。但是,当尝试从链接http://localhost/WOFAPI/Test1/Test.svc
可以正常工作(“ Test1”是用于放置服务的文件夹的名称)。
服务行为配置如下:
<serviceBehaviors>
<behavior name="mexBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
服务和端点如下:
<service name="Test" behaviorConfiguration="mexBehavior">
<endpoint
address=""
behaviorConfiguration="restfulBehavior"
binding="webHttpBinding"
contract="ITest">
</endpoint>
</service>
我也尝试将它们放在App_Code
文件夹中,但是没有运气。 真的有可能将它们物理地放置在文件夹中,而无需文件夹名称访问吗? 我想念什么?
非常感谢您的帮助。 提前致谢。
我终于可以为我的问题找到解决方案。
WCF,MVC和WebAPI依赖System.Web.Routing
命名空间进行路由活动。 该名称空间具有RouteTable
类。 此类具有RouteCollection
类型的成员Routes
。 将您的服务添加到此集合。
遵循以下步骤
1)将System.Web.Routes
dll添加到您的项目(我的项目是WCF应用程序类型,默认情况下没有添加System.Web.Routes dll)
2)添加Global.asax
文件
3)从Application_Start(object sender, EventArgs e)
函数中将服务路由添加到RoutesTable.Routes
集合,如下所示
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("Test.svc", new WebServiceHostFactory(), typeof(Test)));
}
如果您使用Niject WCF进行依赖项注入,请执行以下步骤
1)转到Global.asax
(您可能已经具有继承NinjectHttpApplication
Global.asax
文件)
2)覆盖OnApplicationStarted()
函数
3)如下添加路线
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
RouteTable.Routes.Add(new ServiceRoute("Test.svc", new NinjectServiceHostFactory(), typeof(Test)));
}
附带一提,如果您愿意,可以完全摆脱.svc
扩展名以进行服务。 只是不要在“路由前缀”中添加扩展名。 代替“ Test.svc”,只需提供“ Test” 。 这将导致服务没有扩展。
带有扩展名-> http://localhost/xyz/Test.svc
没有扩展名-> http://localhost/xyz/Test
您应该配置IIS才能知道svc文件在哪里。
更改IIS中应用程序的物理路径
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.