在 Owin Selfhost 上使用 SignalR 和 Nancyfx ||客户端的 Angular2
Using SignalR and Nancyfx on Owin Selfhost || Angular2 on Clientside
我想在我的服务上使用 SignalR 和 Nacyfx。所以我尝试了 Owin Selfhost。我得到了我的 SignalR 运行,我可以从我的 Angular2 客户端访问它,我可以从 SignalR 访问我的客户端,所以 SignalR 似乎一切正常。
但是,当我尝试 access/recieve 来自 Nancy 的数据时,我失败了。我无法从我的客户访问我的 Nancy。
我 运行 我的服务在与我的网站不同的端口上。
节目:
class Program
{
static void Main(string[] args)
{
string url = "http://+:2222";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine("SignalR Server running on {0}", url);
Console.WriteLine();
Console.ReadLine();
}
}
}
启动:
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR(new HubConfiguration() { EnableJSONP = true });
app.UseNancy();
}
}
Hub,像这样:
public class MyHub : Hub
{
private readonly static ConnectionMapper<string> _mappedConnections = new ConnectionMapper<string>();
public override Task OnConnected()
{
var user= Context.QueryString["user"];
_mappedConnections.Add(user, Context.ConnectionId);
Console.WriteLine("User connected: " + user);
Console.WriteLine();
return base.OnConnected();
}
}
所以我的 SignalR 正在使用此代码。
我的南希看起来像:
class NancyServiceModule : Nancy.NancyModule
{
private DatabaseAccess _dbAccess = new DatabaseAccess();
public NancyServiceModule() : base("/nancy/"){
Get["/accessible"] = parameters =>
{
return new Response
{
StatusCode = HttpStatusCode.OK
};
};
}
}
在客户端,我尝试使用类似这样的方式访问 Nancy:
export class DatabaseService {
constructor(
private _http: Http
) {}
getMachines(): Observable<Response> {
return this._http.get('http://localhost:2222/nancy/accessible');
//also tryed Hardcoded IP instead of localhost
}
}
我不知道是我从客户端访问 nacy 时出错了,还是我在服务器端遇到了一些错误。 (网页目前在 Port:3000 运行)
如果您需要更多信息或更多代码,请询问,但我希望我得到了最重要的东西。
如果你们中的一些人能帮助我解决这个问题,那就太好了!
更新
当通过浏览器地址栏访问 nancy 时,nancy 显示 404 错误(也显示 nancy tabicon)。所以在某种程度上它可以工作,但我无法正确访问它。
经过整整一周的绝望,我解决了这个问题。
我觉得有点傻,因为错误发生是因为我的模块不是 Public
所以
public class NancyServiceModule : Nancy.NancyModule
{
....
解决了。
我想在我的服务上使用 SignalR 和 Nacyfx。所以我尝试了 Owin Selfhost。我得到了我的 SignalR 运行,我可以从我的 Angular2 客户端访问它,我可以从 SignalR 访问我的客户端,所以 SignalR 似乎一切正常。 但是,当我尝试 access/recieve 来自 Nancy 的数据时,我失败了。我无法从我的客户访问我的 Nancy。 我 运行 我的服务在与我的网站不同的端口上。
节目:
class Program
{
static void Main(string[] args)
{
string url = "http://+:2222";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine("SignalR Server running on {0}", url);
Console.WriteLine();
Console.ReadLine();
}
}
}
启动:
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR(new HubConfiguration() { EnableJSONP = true });
app.UseNancy();
}
}
Hub,像这样:
public class MyHub : Hub
{
private readonly static ConnectionMapper<string> _mappedConnections = new ConnectionMapper<string>();
public override Task OnConnected()
{
var user= Context.QueryString["user"];
_mappedConnections.Add(user, Context.ConnectionId);
Console.WriteLine("User connected: " + user);
Console.WriteLine();
return base.OnConnected();
}
}
所以我的 SignalR 正在使用此代码。
我的南希看起来像:
class NancyServiceModule : Nancy.NancyModule
{
private DatabaseAccess _dbAccess = new DatabaseAccess();
public NancyServiceModule() : base("/nancy/"){
Get["/accessible"] = parameters =>
{
return new Response
{
StatusCode = HttpStatusCode.OK
};
};
}
}
在客户端,我尝试使用类似这样的方式访问 Nancy:
export class DatabaseService {
constructor(
private _http: Http
) {}
getMachines(): Observable<Response> {
return this._http.get('http://localhost:2222/nancy/accessible');
//also tryed Hardcoded IP instead of localhost
}
}
我不知道是我从客户端访问 nacy 时出错了,还是我在服务器端遇到了一些错误。 (网页目前在 Port:3000 运行)
如果您需要更多信息或更多代码,请询问,但我希望我得到了最重要的东西。
如果你们中的一些人能帮助我解决这个问题,那就太好了!
更新
当通过浏览器地址栏访问 nancy 时,nancy 显示 404 错误(也显示 nancy tabicon)。所以在某种程度上它可以工作,但我无法正确访问它。
经过整整一周的绝望,我解决了这个问题。
我觉得有点傻,因为错误发生是因为我的模块不是 Public
所以
public class NancyServiceModule : Nancy.NancyModule
{
....
解决了。