sourcetip

신호 R "신호기/허브"에서 404 오류 발생

fileupload 2023. 10. 20. 14:06
반응형

신호 R "신호기/허브"에서 404 오류 발생

저는 SignalR(https://github.com/SignalR/SignalR) 을 프로젝트에 사용하고 있습니다.여기 https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs 에서 저는 허브를 사용하는 방법에 대한 아이디어를 얻었습니다.그런데 "signalr/hubs" 스크립트에서 404 오류가 발생하고 있습니다.404 오류가 발생하는 View Source: http://localhost:50378/signalr/hubs에 있는 URL입니다.

여기 내 코드가 있습니다.허브:

public class Test:Hub
{
    public void Start()
    {
        Caller.guid = Guid.NewGuid();
    }

    public void TestMethod()
    {
        Clients.show("test", Caller.guid);
    }
}

ASPX:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Title</title>
        <script src="../Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
        <script src="../Scripts/jquery.signalR.js" type="text/javascript"></script>
        <script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
        <script type="text/javascript">

            $(document).ready(function () {
                var test = $.connection.test;
                $("#btnTest").click(function () {
                    test.testMethod();
                });
                test.show = function (text, guid) {
                    if (guid != test.guid) //notify all clients except the caller
                        alert(text);
                };
                $.connection.hub.start(function () { test.start(); });
            });

        </script>
    </head>
    <body>
        <form id="HtmlForm" runat="server">
            <div>

            </div>
        </form>
    </body>
</html>

Web.config:

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
....

RouteTable 호출을 시도합니다.경로.RouteConfig 이전의 MapHubs().Routes(RouteTable)를 등록합니다.MVC 4를 사용하는 경우 Global.asax.cs 에서 경로를 지정합니다.저한테는 효과가 있어요.

        RouteTable.Routes.MapHubs();
        RouteConfig.RegisterRoutes(RouteTable.Routes);

참조를 추가하지 않았을 수도 있습니다.SignalR.AspNet.dll. 제가 기억하는 바가 맞다면 다음에 경로를 추가할 책임이 있습니다./signalr/hubs.

SignalR 1.0.0 RC2부터 패키지 폴더에 허브 경로를 수동으로 설정해야 한다는 README가 있습니다. :) 여기 토막글이 있습니다...

using System;
using System.Web;
using System.Web.Routing;

namespace MyWebApplication
{
    public class Global : System.Web.HttpApplication
    {
        public void Application_Start()
        {
            // Register the default hubs route: ~/signalr
            RouteTable.Routes.MapHubs();
        }
    }
}

저의 경우, 이 404의 주된 이유는 허브가 제대로 매핑되지 않았기 때문입니다.RouteTable.Routes.MapHubs();이제는 더 이상 쓸모가 없습니다.매핑 허브의 경우 아래와 같이 시작 클래스를 만들 수 있습니다.

[assembly: OwinStartup(typeof(WebApplication1.Startup))]
namespace WebApplication1
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            app.MapSignalR();
        }
    }
}

저도 이 문제와 씨름하다가 마침내 문제의 원인이 되는 지점에 이르렀습니다.일단 시그널 R v2 호출을 통해서 말씀을 드려야겠습니다.RouteTable.Routes.MapHubs();inside Globalasax/Application_Start는 더 이상 사용되지 않으며 컴파일러가 경고를 표시하기도 합니다.대신 다음과 같은 공용 방법으로 전용 StartUp 클래스를 추가합니다.

public void Configuration(IAppBuilder app)
{
    app.MapSignalR();
}

모든 구성이 여기에 적용됩니다.자세한 내용은 설명서를 참조하십시오.

미친 듯이 구글링을 하느라 많은 시간을 허비한 끝에 앞서 언급했던 StartUp 클래스의 Configure 메서드 안에 Exception을 던지기로 결정했습니다.예외가 없다면 오윈이 시작도 하지 않는 것을 이해할 수 있을 것입니다.제 추측이 맞았습니다.어떤 이유에서인지 Owin이 시작하지 않거나 무엇인가가 그것을 억제하고 있었습니다.제 경우에는 제 web.config 파일에 있는 이 사악한 구성 설정이었습니다.

    <add key="owin:AutomaticAppStartup" value="false" />

설정의 이름이 꽤 설명적인가 봅니다.이 항목을 제거하거나 false를 true로 변경합니다.

Visual Studio 개발 서버를 사용하여 코드를 실행할 때 이와 같은 문제가 발생했으며 IIS Local Web Server를 사용하도록 프로젝트 설정을 변경하면 작동했습니다.

enter image description here

데이비드 파울러가 언급한 이 문제에 대해 제기된 결함이 있었습니다.이 문제는 향후 릴리스에서 해결되겠지만 지금은 이 문제를 해결할 수 있습니다.현재 버그에 대한 링크를 찾을 수 없습니다.

방금 IIS를 설치했습니까?이 경우 다시 설치해야 할 수도 있습니다.

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

간단히 말하면 R#(ReSharper)을 사용한 경우 SignalR을 사용하는 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Refactor = > Remove Used References를 클릭했습니다.조심해요 을 쏘는 거예요 :D

에서 중요한 DLL 참조를 제거했습니다.SignalR런타임 중에만 사용됩니다. 즉 컴파일 시간 동안에는 필요하지 않습니다.분명히 R#은 컴파일 시간 종속성만 확인합니다.

즉, 이 두 가지 참조 사항이 누락되었습니다.

  1. 마이크로소프트.AspNet.신호 R.시스템웹
  2. 마이크로소프트.오윈. 호스트님.시스템 웹(이 웹이 없는 경우)SignalROWIN Configuration 메서드는 히트하지도 않습니다.

NuGet 패키지를 제거한 다음 다시 설치했습니다.고쳤습니다./hubs 404호호.

시그널R wiki(https://github.com/SignalR/SignalR/wiki/Faq) 에서 나온 전체 답변입니다.효과가 있었습니다.

먼저 Global.asax에 있는 MapHubs()에 전화가 걸려 있는지 확인합니다.

응용 프로그램에서 다른 경로보다 먼저 허브 경로가 먼저 등록되어 있는지 확인하십시오.

RouteTable.Routes.MapHubs();

ASP.NET MVC 4에서는 다음을 수행할 수 있습니다.

<script type="text/javascript" src="~/signalr/hubs"></script>

MVC 3 어플리케이션을 작성하는 경우 URL을 사용하고 있는지 확인합니다.스크립트 참조를 위한 내용:

<script type="text/javascript" src="@Url.Content("~/signalr/hubs")"></script>

일반 ASP를 쓰신다면.NET 응용 프로그램은 스크립트 참조를 위해 ResolveClientUrl을 사용합니다.

<script type="text/javascript" src='<%= ResolveClientUrl("~/signalr/hubs") %>'></script>

위의 내용이 여전히 작동하지 않으면 web.config:에 RAMMFAR이 설정되어 있는지 확인합니다.

<configuration>
   <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
        </modules>
    </system.webServer>
</configuration>

당신은 자바스크립트 파일을 참조해야 합니다.@Url.Content, 우리가 ASP를 사용한다고 가정할 때.NET MVC3

좋아요:

<script src="@Url.Content("~/Scripts/jquery.signalR.min.js")" type="text/javascript"></script>

GitHub에서 SignalR FAQ 보기

편집: Trevor De Koekokek가 그들의 논평에서 언급했듯이, 당신은 추가할 필요가 없습니다.@Url.ContentMVC4 이상을 사용하는 경우.단순히 uri에 다음과 같은 것을 붙이기만 하면 됩니다.~/충분합니다자세한 내용은 이 다른 SO 질문을 확인하십시오.

제 프로젝트는 ASP.net 4.0 C# Web App이고 테스트 환경은 Windows Server 2012입니다.

저는 1.0.0 RC2에 대해서도 같은 문제가 있었는데 마이클이 제안한 대로 했고 작동합니다.감사해요.

@MatteKarla: NuGet에 의해 SignalR 1.0.0 RC2를 설치할 때, 다음 참조사항이 프로젝트에 추가됩니다.

  • 마이크로소프트.AspNet.신호 R.코어
  • 마이크로소프트.AspNet.시그널 R.Owin
  • 마이크로소프트.AspNet.신호 R.시스템웹
  • 마이크로소프트.오윈. 호스트님.시스템웹

마이크로소프트를 추가해야 합니다.컴파일하는 동안 수동으로 Csharp을 수행하거나 다음 오류가 발생합니다.

  • 미리 정의된 'Microsoft' 유형입니다.씨샤프.런타임 바인더.바인더'이(가) 정의되거나 가져오지 않았습니다.

Signalr 2.0으로 업데이트하고 MVC 프로젝트를 프로덕션 서버에 배치할 때 404건의 오류가 발생했습니다.게시하기 전에 기존 파일을 모두 삭제하기 옵션을 사용하여 프로젝트를 게시하면 문제가 해결되었습니다.

누군가에게 도움이 되길 바랍니다.

저도 ASP에서 이와 같은 문제를 발견했습니다.NET 4.0 Web Forms 애플리케이션.개발 서버에서는 작동했지만 프로덕션 환경에서는 작동하지 않았습니다.모든 요청/모듈이 관리 모드에서 실행되도록 보장하는 솔루션은 우리에게 적합하지 않았습니다.

우리가 사용한 솔루션(ASP에 더 적합).NET Web Forms)은 다음과 같습니다.다음 섹션을 웹에 추가합니다.구성:

<modules>
  <remove name="UrlRoutingModule-4.0" />
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  <!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
</modules>

아마 언급할 가치가 있을 것입니다.저는 자체 수동 라우팅을 사용하는 웹 양식 응용 프로그램을 실행하고 있습니다.라우팅 테이블이 설정된 후 OWIN 시작이 발생하므로 /signalr/hubs에 대한 경로가 적중되지 않았습니다.나는 "/signalr"로 시작하는 모든 경로에서 경로(즉, 웹 양식이 라우팅하도록 허용)를 무시하는 규칙을 추가했습니다.이것으로 제 문제가 해결되었습니다.

저는 이 문제를 어플리케이션 풀 전환으로 해결했습니다.NET Framework 버전(v2.0 ~ v4.0).

허브 클래스 이름이 'Test'이고 클라이언트 측에서 'Test'를 참조하기 때문일 수 있습니다.

signalr/ hubs 파일이 필요한 것은 아니며, 함수를 호출하는 더 쉬운 디버깅과 간단한 방법을 제공하기 위한 것입니다.참조 : 생성된 프록시가 사용자에게 어떤 역할을 하는지 확인하십시오. 이것이 전부입니다.없으면 일이 잘 될 겁니다.

저에게 해결책은 모든 패키지다시 설치하고 모든 종속 요소를 복원하는 것이었습니다.

nuget powershell을 열고 이 명령을 사용합니다.

Update-Package -Reinstall

덧셈app.MapSignalR();인에Startup클래스에서 문제를 해결합니다.

저의 경우 OWIN Startup을 해고하지 않은 이유(기존, big mvc project에 신호기가 추가됨).구성()에 web.config의 "dependentAssembly" 및 잘못된 "targetFramework" 버전이 없습니다.

저는 간단한 시그널R 프로젝트를 처음부터 만들고 web.config 파일을 비교하였습니다.도움이 된 것은 다음과 같습니다.

  1. 4.5에서 4.5.2인치로 보정
    <httpRuntime targetFramework="4.5" ... > 
    <compilation debug="true" targetFramework="4.5" ... >
  1. 종속 어셈블리 추가:
<dependentAssembly> 
    <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
</dependentAssembly>

url 호스팅이 잘못되어 그 예외를 받고 있었습니다.나는 "/chathub"이라고 적었지만 내 엔드포인트에는 "/chat"이라고 적었습니다.

언급URL : https://stackoverflow.com/questions/8941595/signalr-signalr-hubs-giving-404-error

반응형