Обработчик запроса не найден:
Я впервые создаю стек услуг: hello world.
я следовал шаг за шагом руководство в здесь:
но это дает мне ошибку: обработчик для запроса не найден: что может быть недостающей частью? спасибо.
вот мой глобальный.асакс.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using ServiceStack.ServiceHost;
using ServiceStack.WebHost.Endpoints;
namespace ServiceStack.SearchService
{
public class Global : System.Web.HttpApplication
{
public class Hello { public string Name { get; set; } }
public class HelloResponse { public string Result { get; set; } }
public class HelloService : IService<Hello>
{
public object Execute(Hello request)
{
return new HelloResponse { Result = "Hello, " + request.Name };
}
}
/// Web Service Singleton AppHost
public class HelloAppHost : AppHostBase
{
//Tell Service Stack the name of your application and where to find your web services
public HelloAppHost()
: base("Hello Web Services", typeof(HelloService).Assembly) { }
public override void Configure(Funq.Container container) { }
}
protected void Application_Start(object sender, EventArgs e)
{
//Initialize your application
var appHost = new HelloAppHost();
appHost.Init();
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
}
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
}
}
}
вот мой веб.config:
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<connectionStrings>
<add name="ApplicationServices" connectionString="data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880" />
</authentication>
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
<httpHandlers>
<add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
<add path="api*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
</httpHandlers>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>
<location path="servicestack">
<system.web>
<httpHandlers>
<add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
<add path="servicestack*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
</httpHandlers>
</system.web>
<!-- Required for IIS 7.0 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>
</location>
</configuration>
Я просматриваю его, набрав в браузере.
http://localhost:50097/ServiceStack.SearchService/servicestack/metadata
3 ответов
похоже, вы пытаетесь разместить ServiceStack как в / корневой путь и при смеси /servicestack
и /api
пользовательские пути. Вам нужно выбрать один из них, а не комбинацию из всех 3. Вот конфигурация, если вы хотите разместить в / путь к корню:
<system.web>
<httpHandlers>
<add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
</httpHandlers>
</system.web>
<!-- Required for IIS 7.0 -->
<system.webServer>
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>
выше должно заменить все остальные сопоставления конфигурации ServiceStack. После этого вы сможете просмотреть страницу метаданных at:
http://localhost:50097/metadata
Примечание: Если вы работаете ASP.NET на порту маловероятно, что у вас также есть виртуальный каталог path /ServiceStack.SearchService/
.
в этом списке отсутствует небольшой шаг, который вам нужен, если вы собираетесь сопоставить службы с пользовательским путем. вы можете найти его здесь:
процитировать недостающий шаг:
вам также необходимо настроить корневой путь в вашем AppHost.
public override void Configure(Container container)
{
SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "api" });
}
здесь "api"
- это имя пользовательского пути, который вы используете.
у меня была эта точная проблема, которую я имел и не мог найти прямого ответа - получение ошибки 403.14 на простейшей демонстрации ServiceStack.
..:: Простой Ответ:..
ответ прост. Вы смутили своих обработчиков, предоставив 3 вместо одного, как упоминалось Mythz. Кроме того, у вас нет указанного маршрута для вашего запроса.
[Route("/hello")]
public class Hello { public string Name { get; set; } }
это разрешит как вашу ошибку 403.13 (семантическую проблему), так и вы можете перейти к http:/ / {localdomain}: {port} / hello и фактически видеть метаданные (замените {port} фактическим номером порта IIS Express, назначенным вам). Без этой настройки вам нужно будет перейти к http:/ / {localdomain}: {port} / metadata.
..:: Подробный Ответ ::..
маршрутизация, поскольку она относится к IIS в ServiceStack, выполняется семантикой / соглашением. Поскольку эти маршруты являются динамическими, если IIS не обеспечивает правильную маршрутизацию во время выполнения, предполагается, что проблема с папкой (физический путь) и выдает ошибку 403.14. В то же время, если вы предоставляете более одного пути, где должен быть только один, плохие вещи происходят во время выполнения, когда все подключено.
чтобы быть уверенным, что у вас есть все необходимое, вот все настройки, которые вам нужно внести в исходный код.
а. Измените файл web. config для обработки только один путь, как сообщается в Mythz ответ
<system.web>
<httpHandlers>
<add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
</httpHandlers>
</system.web>
<!-- Required for IIS 7.0 -->
<system.webServer>
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>
b. Сделать маршрут корректировка, описанная выше в этой должности.