繁体   English   中英

将WCF服务放在文件夹中会抛出404

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM