2014-07-10 3 views
6

를 signalr에 연결 나는 콘솔 응용 프로그램 내부의 간단한 SignalR 허브를 만들었습니다허브를

static Microsoft.AspNet.SignalR.Client.HubConnection signalR { get; set; } 
public static Microsoft.AspNet.SignalR.Client.IHubProxy signalRhub { get; set; } 

public static void StartSignalR() 
{ 
    var url = "http://localhost:1968"; 
    signalR = new Microsoft.AspNet.SignalR.Client.HubConnection(url); 
    signalR.Received += signalR_Received; 
    signalRhub = signalR.CreateHubProxy("echo"); 
    signalR.Start().Wait(); 
    signalRhub.Invoke("Say", "hub invoked"); 
} 

내 다음 단계는 jquery의 SignalR 허브를 연결하는 것입니다 :

<script src="../Scripts/jquery-1.6.4.js"></script> 
<script src="../Scripts/jquery.signalR-2.1.0.js"></script> 
<script> 
    $(function() 
    { 
     var connection = $.hubConnection("http://localhost:1968"); 
     connection.start() 
      .done(function() { 
       console.log('connected'); 
       connection.send("success?"); 
      }) 
      .fail(function (a) { 
       console.log('not connected'+a); 
      }); 
    }); 
</script> 

나는이 스크립트를 실행하려고, 그것은 오류가 있습니다 : 내 실버 라이트 페이지에서 허브에 연결할 수 있습니다 왜

"XMLHttpRequest cannot load localhost:1968/signalr/negotiate?clientProtocol=1.4&_=1404978593482. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin <code>http://localhost:55282</code> is therefore not allowed access." 

을 (로컬 호스트에서 호스팅 : 3926)
을하고 난을 실행할 때 실패 jquery 스크립트 (localhost : 55282에서 호스팅)?

내 jQuery와 SignalR 허브 간의 연결을 얻으려면 어떻게해야합니까?

+1

내 생각은 JS가 아닌 다른 포트에서 호스팅하기 때문에이, 크로스 사이트 요청으로 해석된다는 것이다 SignalR 허브. [동일한 출처 정책] (http://en.wikipedia.org/wiki/Same-origin_policy)이 적용됩니다. – scheien

+0

그럴듯하지만, 왜 다른 포트에서 호스팅되는 Silverlight도 성공적으로 연결할 수 있습니까? 그렇다면 교차 요청이 허용되도록 SignalR 허브를 설정할 수 있습니까? – henk

+0

[CORS 사용] (http://www.html5rocks.com/en/tutorials/cors/). 범법자 인 브라우저입니다. Silverlight 구현에서 .NET SignalR 클라이언트를 사용하고 있습니까? – scheien

답변

13

변경

$(function() 
    { 
    var connection = $.hubConnection("http://localhost:1968"); 
    connection.start() 
     .done(function() { 
      console.log('connected'); 
      connection.send("success?"); 
     }) 
     .fail(function (a) { 
      console.log('not connected'+a); 
     }); 
}); 

$(function() 
{ 
var connection = $.hubConnection("http://localhost:1968"); 
var hub = connection.createHubProxy("echo"); 
hub.on("AddMessage", Method); 
connection.start({ jsonp: true }) 
      .done(function() { 
      console.log('connected'); 
      hub.say("success?"); 
     }) 
     .fail(function (a) { 
      console.log('not connected'+a); 
     }); 
}); 

function Method(messageFromHub) 
{ 
alert(messageFromHub); 
} 

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

class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.MapSignalR(new HubConfiguration() { EnableJSONP = true });} 
} 

그것은해야 그래.

app.MapSignalR(new HubConfiguration() { EnableJSONP = true });} 

connection.start({ jsonp: true }) 

createHubProxy()과 크로스 사이트 요청을 SignalR의 서버에

+0

고맙습니다. 연결은 이제 양쪽에서 작동합니다! – henk

+0

감사합니다, 그 웹 API 및 PHP 클라이언트 –

1

RPC를 수 : 대답에

감사를 이씨 Ravlani

에서

하지만 나를 위해

hub.say("success?"); 

이 작동하지 않습니다!

hub.invoke('say','success?'); 

을 그리고 SignalR 자동으로 클라이언트에 CrossOrigin을 감지 : (? 당신을 위해 작동합니까)

를 내가 작성해야합니다.

내가 사용하고 서버에서

:에서 설명

app.Map("/signalr", map => 
      { 
       map.UseCors(CorsOptions.AllowAll); 

       map.RunSignalR(); 
      }); 

: http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#crossdomain

+0

나를 도왔습니다 이것은 내가 볼 수있는만큼 대답은 아닌가요? 질문이 있으시면 직접 작성하셔야합니다 ... –

+0

이것은 Vishal Ravlanis의 답변에 추가 된 내용입니다. 제 경우에는이 답변이 완벽하게 작동하지 않습니다. 제 질문은 Vishal Ravlanis를 목표로합니다 ... – MichiBack

+0

1 @MichiBack'hub.Invoke'는'hub.say'보다는 나를 위해 일했습니다. –

관련 문제