많은 작업자 프로세스를 관리하는 허브가 있습니다. 이 허브에 연결하고 이러한 작업자 프로세스 중 하나에서 처리 로그를 검색 할 수있는 UI를 작성하려고합니다. 본질적으로 이것은 다른 클라이언트로부터 문자열을 얻고 자하는 클라이언트가 될 것입니다. 나는 클라이언트 B에게 보낸 클라이언트 A로부터 요청을받을 수 있었지만 그 응답에서 무엇을 반환 할 지 모릅니다. C# SignalR 클라이언트에서 값을 반환하는 방법
나는이 요청은 클라이언트에 의해 선택됩니다 허브public void GetRunLog(int runid)
{
JobRunLog log = null;
JobRunClient client = this.GetClientByRunID(runid);
if(client != null)
{
var rawlog = Clients.Client(client.ConnectionID).GetRunLog();
log = JsonConvert.DeserializeObject<JobRunLog>(rawlog);
Clients.Client(Context.ConnectionId).GetRunLog(log);
}
}
에 간단한 방법을 가지고,하지만 난 그것을 var rawlog
실제로 뭔가를 포함하고 그래서 값을 반환하는 방법을 잘 모릅니다. 잠시 동안, 이것이 내가 생각해 낼 수있는 최선의 해결 방법입니다.
myHubProxy.On("GetRunLog", (uiconnectionid) =>
{
string connectionid = uiconnectionid;
myHubProxy.Invoke("ReturnRunLog", run.ID, run.Log, connectionid).ContinueWith(task => {});
});
이
는 작업자 클라이언트가 로그를 요청했다 클라이언트에 대한 참조를 사용하여 별도의 요청에 다시 로그를 보내 게되지만, 실제로는 초기 요청에 respnonse을 반환 밤은. 나는이 일이 일어날 수있는 길을 볼 수 없다. Invoke를 사용하는 대신 요청을 시작한 허브의 메서드로 개체를 직접 반환하는 방법은 무엇입니까?
이 있다면
이 조금 일반적인 예는, 해당 요청의 끝에서 인스턴스를 처리 어쩌면 귀하의 경우는 객체를 다시 보낼 수 있으며, 인스턴스에 제공하고, 나는 일터에서 주변을 돌고있는 곳입니다. 나는 그때 서버가 단지 var 응답 = Clients.Client (conid) .somefunction()을 가짐으로써 클라이언트로부터 간단한 응답을 얻을 수있는 방법이 없다고 가정하고있다. –
네, 맞습니다. [한 메소드 호출에서 다음 메소드 호출로 상태를 유지하는 데 사용할 수 없습니다.] (https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to- the-api/hubs-api-guide-server # hubclass) – ASpirin