2012-05-14 11 views
8

मैं पहली बार सेवा ढेर का निर्माण कर रहा हूं: हैलो वर्ल्ड।अनुरोध के लिए हैंडलर नहीं मिला:

मैं here में कदम गाइड द्वारा कदम का पालन किया है:

लेकिन यह मुझे एक त्रुटि दे रहा है: अनुरोध के लिए हैंडलर नहीं मिला: क्या याद आ रही हिस्सा हो सकता है? धन्यवाद।

यहाँ मेरी global.asax.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. 

     } 

    } 
} 

है यहाँ मेरी web.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 

उत्तर

7

ऐसा लगता है कि आप / रूट पथ पर और /servicestack और /api कस्टम पथ का एक मिश्रण में दोनों ServiceStack की मेजबानी के लिए कोशिश कर रहे हैं। आप यहाँ config यदि आप / root path पर होस्ट करना चाहते हैं है उनमें से एक, सभी 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 config मानचित्रण बदल दिया जाना चाहिए।

http://localhost:50097/metadata

नोट:: एक बार ऐसा करने के बाद आप पर मेटाडाटा पृष्ठ को देखने के लिए सक्षम होना चाहिए आप एक बंदरगाह पर ASP.NET चला रहे हैं यह संभावना नहीं तुम भी वर्चुअल निर्देशिका पथ है कि है /ServiceStack.SearchService/

+0

आप 'सर्विसस्टैक' के साथ एक महान काम कर रहे हैं। यहां से https://github.com/ServiceStack/ServiceStack.UseCases/tree/master/CustomAuthenticationMvc से 'CustomAuthenticationMvc' प्रोजेक्ट को आजमाएं और यह बहुत अच्छा काम कर रहा है! :) अद्भुत काम जारी रखें ... मैं एक मोनो टच आईओएस ऐप से webservice को कॉल करने की योजना बना रहा हूं। –

+0

thx - खुशी है कि आप इसका आनंद ले रहे हैं :) – mythz

+0

ट्यूटोरियल के बारे में मेरी पढ़ाई ने बताया कि अगर आपने nuget का उपयोग किया है तो आपको web.config प्रविष्टियों को मैन्युअल रूप से करने की आवश्यकता नहीं होगी। मुझे करना पड़ा। यह भी: जैसा कि आपने किसी अन्य एमवीसी ऐप से शुरुआत की है, आपको कहीं और बताया है कि आपको डिफ़ॉल्ट मार्ग पर टिप्पणी करना है - आखिर में यह मेरे लिए तय है। – GeorgeBarker

11

उस सूची से एक छोटा कदम गायब है जिसे आपको कस्टम पथ पर सेवाओं को मैप करने के लिए आवश्यक है। You can find it here:

लापता कदम के शब्दों में:

You also need to configure the root path in your AppHost.

public override void Configure(Container container) 
{ 
    SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "api" }); 
} 

कहाँ "api" प्रयोग कर रहे हैं कस्टम पथ का नाम है।

+1

+1 यह दस्तावेज़ों से यहां अनुपलब्ध प्रतीत होता है [यहां] (http://servicestack.net/ServiceStack.Hello/) @mythz – RedFilter

+0

इससे मेरी समस्या हल हो गई। – saille

2

मेरे पास यह सही मुद्दा था और मुझे सीधा जवाब नहीं मिला - सरलतम सर्विसस्टैक डेमो पर 403.14 त्रुटि प्राप्त करना।

.. :: सरल उत्तर :: ..

आपका जवाब सरल है। आपने मिथज़ द्वारा उल्लिखित एक के बजाय 3 प्रदान करके अपने हैंडलर को भ्रमित कर दिया है। इसके अलावा, आपके पास आपके अनुरोध के लिए कोई निर्दिष्ट मार्ग नहीं है।

[Route("/hello")] 
public class Hello { public string Name { get; set; } } 

यह हल होगा दोनों अपने 403.13 त्रुटि (अर्थ मुद्दे) और आप अपने http पर जा सकते हैं: // {localdomain}: {बंदरगाह}/हैलो और वास्तव में मेटाडाटा (स्थानापन्न {बंदरगाह} के साथ देखना वास्तविक पोर्ट नंबर आईआईएस एक्सप्रेस आपको सौंपा गया)। इस समायोजन के बिना, आपको http: // {localdomain}: {port}/metadata पर जाना होगा।

.. :: विस्तृत उत्तर :: ..

रूटिंग, क्योंकि यह सर्विसस्टैक में आईआईएस से संबंधित है अर्थशास्त्र/सम्मेलन द्वारा किया जाता है। चूंकि ये मार्ग गतिशील होते हैं, जब आईआईएस को रन टाइम पर उचित रूटिंग प्रदान नहीं किया जाता है, तो यह मानता है कि एक फ़ोल्डर समस्या (भौतिक पथ) है और 403.14 त्रुटि फेंकता है। साथ ही, यदि आप एक से अधिक पथ प्रदान करते हैं जहां केवल एक होना चाहिए, तो खराब चीजें रन टाइम पर होती हैं जब सब कुछ वायर्ड हो जाता है।

बस यह सुनिश्चित करने के लिए कि आपके पास सभी आवश्यक शर्तें हैं, यहां दिए गए मूल कोड में आपको आवश्यक सभी समायोजन हैं।

ए। मिथज़ प्रतिक्रिया

<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> 

बी में खोजे गए एक पथ को संभालने के लिए वेब कॉन्फ़िगरेशन फ़ाइल को समायोजित करें। इस पोस्ट में पहले वर्णित मार्ग समायोजन करें।