我在一個解決方案中有兩個web API項目DLL。我的項目解決方案的NET Web api 2在某個時間在IIS中停止工作
結構:
在我的解決方案,該項目位於如下:
1)對於基本溶液
2)基本的Web API
3) Module Web API
因此,我的解決方案就像是一個包含許多模塊的BASE解決方案。每個模塊都可以包含自己的Web API。此外,我的基本解決方案包含自己的Web API
這是我們的結構。
我的問題:
它工作正常在我的本地運行的解決方案。當我將它託管到IIS時,它會運行幾個小時,然後通過拋出錯誤消息「發現錯誤404」停止工作。當我嘗試直接通過URL訪問類似於「http://127.0.0.1:51/Products/Get」的內容時,無法正常工作。
的Visual Studio版本:
的Visual Studio專業 - 2015年
IIS版本:
IIS - 7.5.7600
我的方法: 我有一個模擬此場景的簡單項目。它與我的原始項目有同樣的問題。
網頁API對於基本模塊: App_Start下
WepApiConfig:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
基地API控制器:
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
}
WebApiConfig。CS對於模塊Web API:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
//config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultModuleApi",
routeTemplate: "api/module/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
模塊API控制器:
兩個APIConfig文件之間的差異是:
從上面的代碼public class ModulesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
}
注
對於模塊代碼:
routeTemplate: "api/module/{controller}/{action}/{id}"
爲基本守則:
routeTemplate: "api/{controller}/{action}/{id}"
的Global.asax:
namespace BaseSln
{
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//GlobalConfiguration.Configure(WebApiConfig.Register);
var typesWithMyAttribute =
from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetLoadableTypes().Where(t1 => t1.Name == "WebApiConfig"
&& t1.GetMethod("Register") != null
&& t1.GetMethod("Register").IsStatic)
select new { Type = t, MethodInfo = t.GetMethod("Register") };
//register all the Routes
foreach (var type in typesWithMyAttribute)
{
var mi = type.MethodInfo;
Action<HttpConfiguration> action = null;
try
{
action = Delegate.CreateDelegate(typeof(Action<HttpConfiguration>), mi) as Action<HttpConfiguration>;
}
catch
{
//ignore the errors for now... should be handled somewhere else or logged.
}
if (action != null) GlobalConfiguration.Configure(action);
}
}
}
}
我上述項目試了一下:
在IIS託管後,我試圖訪問該是這樣的路徑:
爲基礎API:
http://localhost:51600/api/Values/Get
返回:
value1
value2
對於模塊API
http://localhost:51600/api/Modules/Get
返回:
value1
value2
我的問題:
一段時間後,當我試圖訪問相同的鏈接,我無法獲取。它說
status 404. Not Found
我一直在這個問題上工作了3天,我無法解決問題。
我已經搜索了很多文章在stackoverflow,但沒有運氣。
請幫我擺脫這一點。
謝謝。
我想看看你在那裏吞嚥任何錯誤的try/catch塊。嘗試記錄某處並查看它是否在那裏。 – DavidG
它如何停止工作? AppPool停止了嗎? IIS中的站點停止了嗎?你如何重新啓動它? (你是否回收應用程序池或重新啓動在IIS或類似的網站?) –
你能解決這個問題,因爲我也有這個問題 –