ASP.NET 4.5 웹 사이트에서 클라이언트에서 서버를 호출 할 때 Signalr 오류 500
-
11-12-2019 - |
문제
ASP.NET 4.5 웹 폼으로 signalr 를 사용하고 있습니다. 나는 클라이언트가 서버와 대화 할 수 없었고 그 반대의 경우도 마찬가지입니다. 내가 얻고 싶은 것은 클라이언트가 서버 함수를 트리거하고 서버가 클라이언트 기능을 트리거 할 수있는 방법을 테스트 할 수 있습니다. 내가 사용하는 코드는 다음과 같습니다.
클라이언트 사이드 코드 (HITCOUNTER.ASPX)
.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="Scripts/jquery-1.8.2.js"></script>
<script src="Scripts/jquery.signalR-0.5.3.min.js"></script>
<script type="text/javascript" src="SignalR/Hubs"></script>
<style>
#currentHitCount {
font-family: Arial;
font-size:40pt;
margin-left:auto;
margin-right:auto;
display:block;
text-align:center;
}
</style>
</head>
<body>
<div id="currentHitCount"></div>
<script type="text/javascript">
$(function () {
var hub = $.connection.hitCounter;
$.extend(hub, {
showHitCount: function (hitCount){
if(hitCount > 1){
$('#currentHitCount')
.html("This site has had " + hitCount + " hits.");
}
else{
$('#currentHitCount')
.html("This site has had " + hitCount + " hit.");
}
},
addMessage: function (str) {
$('#currentHitCount')
.html("Getting Message: " + str);
}
});
$.connection.hub.start(function () {
hub.addMessage("test");
hub.addHit();
});
$.connection.hub.stateChanged(function (change) {
if ($.signalR.connectionState["connected"] === change.newState) {
}
});
$.connection.hub.error(function () {
});
});
</script>
<div style="background-color:red; width:290px; height:200px; color:white; position:absolute; top:100px; left:30px;" id="thebutton">test</div>
</body>
</html>
서버 사이드 코드 (app_code / hitcounterhub.cs)
.
using SignalR.Hubs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
[HubName("hitCounter")]
public class HitCounterHub : Hub, IDisconnect
{
static int _hitCount;
public void addHit(string pageId)
{
_hitCount += 1;
Clients.showHitCount(_hitCount);
}
public Task ClientCallingServer()
{
_hitCount += 1;
return Clients["foo"].showHitCount(_hitCount);
}
public Task Join()
{
return Groups.Add(Context.ConnectionId, "foo");
}
public Task Send(string message)
{
_hitCount += 1;
return Clients["foo"].addMessage(message);
}
public Task Disconnect()
{
return Clients["foo"].leave(Context.ConnectionId);
}
}
IIS7.5에서 코드를 로컬로 실행 중이지만 Visual Studio 2012에서 코드를 실행할 때 코드를 실행할 때 발생합니다.
오류 :
localhost / signalr / signalr / send? 전송= serversentEvents & connectionID= 400F1302-6C8E-418E-A14C-DA95F836A29D 500 (내부 서버 오류)
Chrome 디버거를 사용하여 오류 페이지가 표시됩니다. 'AddHit'방법을 해결할 수 없습니다.
다시 한번하는 것은 클라이언트와 클라이언트에서 서버를 서버에서 호출하는 방법을 확인하는 간단한 테스트를 수행하는 것입니다.
감사합니다.
해결책
AddHit 메서드를 해결할 수없는 이유는 클라이언트를 수행 할 때 서버에 동일한 함수 이름이 있기 때문입니다.
일명은 hub.addhit ( "laksjdf")를 수행하는 서버를 호출합니다.그러나 클라이언트를 호출하는 것은 동일한 일이 될 것입니다 : HUB.ADDHIT ( "laksjdfldksj");따라서 모호성이 있습니다.클라이언트 또는 서버 측 기능의 이름을 변경하여 이름 지정 센스에서 고유합니다.
이 문제는 다음 SignalR의 다음 릴리스에서 수정됩니다.