Простая ситуация. Как подключиться к серверному приложению SignalR, которое находится на моем сервере удаленного рабочего стола (порты включены), с помощью клиента, который находится на моем компьютере. Соединение работает отлично, находясь на локальном хосте, как только я указываю IP-адрес удаленной машины, он выдает ошибку 400.
Сторона сервера:
namespace SignalRHub
{
class Program
{
static void Main(string[] args)
{
string url = @"http://localhost:8080/";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine(string.Format("Server running at {0}", url));
Console.ReadLine();
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
[HubName("TestHub")]
public class TestHub : Hub
{
public void DetermineLength(string message)
{
Console.WriteLine(message);
string newMessage = string.Format(@"{0} has a length of: {1}", message, message.Length);
Clients.All.ReceiveLength(newMessage);
}
}
}
Сторона клиента
namespace SignalRClient
{
class Program
{
static void Main(string[] args)
{
IHubProxy _hub;
//string url = @"http://localhost:8080/";
string url = @"http://111.11.11.111:8080";
var connection = new HubConnection(url);
_hub = connection.CreateHubProxy("TestHub");
try
{
connection.Start().Wait();
Console.WriteLine("Connection OK. Connected to: "+url);
}
catch (Exception e)
{
Console.WriteLine(e);
Console.ReadLine();
throw;
}
_hub.On("ReceiveLength", x => Console.WriteLine(x));
string line = null;
while ((line = System.Console.ReadLine()) != null)
{
_hub.Invoke("DetermineLength", line).Wait();
}
Console.Read();
}
}
}
Ошибка выдает:
«System.AggregateException: произошла одна или несколько ошибок. ---> Microsoft.AspNet.SignalR.Client.HttpClientException: StatusCode: 400, ReasonPhrase: 'Bad Request'»
Я знаю, что есть похожие темы, но поскольку я знаком только с консолью C# и приложениями для Windows, было бы здорово найти решение для подключения приложений к приложениям. Мой сервер RDP полностью доступен. У меня работают базы данных и другие службы, поэтому проблема, очевидно, в коде. Я, кстати, изменил IP в посте, так что это ненастоящее .. P.S. если я использую url = @ "http: // * 8080 /" на стороне сервера, компилятор выдаст «HttpListenerException: доступ запрещен» ...





Проблема решена путем открытия соединения на стороне сервера с использованием CMD от имени администратора и установки:
netsh http add urlacl http://*:8080/ user=EVERYONE
Также убедитесь, что порты открыты в брандмауэре. Разработка приложений .NET. В ISS также должны быть включены службы WebSocket.