[英]The file upload working in IIS express but not working on local IIS
[英]SignalR not working on local IIS but working with IIS Express
我正在嘗試編寫一個小的SignalR項目。 當項目設置為在IIS Express下運行時,一切都會正常進行。
但是,在Visual Studio項目屬性中,我切換到“本地IIS”並嘗試運行時,頁面加載並且未連接到SignalR Server。
我檢查了Fiddler,發現所有腳本都相對於路徑正確加載,但SignalR調用是對網站根目錄進行的。 因此,在提琴手中,我看到這樣的東西:
3 304 HTTP localhost /TestApp/Scripts/jquery-1.10.2.min.js 0 microsoftedgecp:11004
4 304 HTTP localhost /TestApp/Scripts/jquery.signalR-2.1.2.min.js 0 microsoftedgecp:11004
6 404 HTTP localhost /signalr/negotiate?clientProtocol=1.4&connectionData=%5B%7B%22name%22%3A%22testapphub%22%7D%5D&_=1440092162315 4,958 private text/html; charset=utf-8 microsoftedgecp:11004
如您所見,當項目在/TestApp/
下運行時, /signalr
在/signalr
上調用它的協商。
我怎樣才能告訴它正確的位置(相對)?
編輯
這是我的OwinStartup.cs
:
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
我在global.asax中沒有定義任何內容-應該嗎?
來自developer82的答案對我來說不是很有效,但是我沒有足夠的意見要發表,所以我將其作為單獨的答案提交。 我需要這樣指定連接:
var connection = $.hubConnection('/TestApp/signalr');
其中,TestApp是虛擬目錄名稱。 請注意,我明確地必須將信號器附加到最后。
切換到本地IIS時遇到了同樣的問題。 通過“ Manage NuGet Packages”升級到signalR-2.2.0之后,我確實閱讀了以下readme.txt:
有關使用SignalR的更多信息,請參閱http://go.microsoft.com/fwlink/?LinkId=272764 。
從1.x升級到2.0請參閱http://go.microsoft.com/fwlink/?LinkId=320578 ,以獲取有關如何將SignalR 1.x應用程序升級到2.0的更多信息。
映射集線器連接要在您的應用程序中啟用SignalR,請使用以下代碼創建一個名為Startup的類:
using Microsoft.Owin; using Owin; using MyWebApplication; namespace MyWebApplication { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } }
入門有關如何入門的更多信息,請參見http://www.asp.net/signalr/overview/getting-started 。
為什么〜/ signalr / hubs返回404或為什么出現JavaScript錯誤: “ myhub未定義”? 此問題通常是由於缺少對自動生成的Hub JavaScript代理的腳本引用,該腳本位於'〜/ signalr / hubs'。 請確保已在應用程序中的所有其他路由之前注冊了集線器路由。
在ASP.NET MVC 4中,您可以執行以下操作:<script src="~/signalr/hubs"></script>
如果要編寫ASP.NET MVC 3應用程序,請確保將Url.Content用於腳本引用:
<script src="@Url.Content("~/signalr/hubs")"></script>
如果要編寫常規的ASP.NET應用程序,請使用ResolveClientUrl作為腳本引用,或使用應用程序根目錄相對路徑(以'〜/'開頭)通過ScriptManager進行注冊:
<script src='<%: ResolveClientUrl("~/signalr/hubs") %>'></script>
如果上述方法仍然無效,則可能是路由和無擴展名URL出現問題。 要解決此問題,請確保已為IIS和ASP.NET安裝了最新的修補程序。
由於我正在使用常規的ASP.NET應用程序,因此必須更改此設置:
<script src="/Scripts/jquery-1.10.2.min.js" ></script>
<script src="/Scripts/jquery.signalR-2.1.2.js"></script>
<script src="/signalr/hubs"></script>
對此:
<script src='<%: ResolveClientUrl("~/Scripts/jquery-1.10.2.min.js") %'></script>
<script src='<%: ResolveClientUrl("~/Scripts/jquery.signalR-2.2.0.js") %>'></script>
<script src='<%: ResolveClientUrl("~/signalr/hubs") %>'></script>
以前,我添加了一個類文件“ Startup.SignalR.cs”:
using Owin;
using Microsoft.AspNet.SignalR;
namespace WebApplication1
{
public partial class Startup
{
public void ConfigureSignalR(IAppBuilder app)
{
app.MapSignalR();
}
}
}
我的Startup.cs看起來像這樣:
using Microsoft.Owin;
using Owin;
[assembly: OwinStartupAttribute(typeof(WebApplication1.Startup))]
namespace WebApplication1
{
public partial class Startup {
public void Configuration(IAppBuilder app) {
//System.Diagnostics.Debugger.Break();
ConfigureSignalR(app);
ConfigureAuth(app);
}
}
}
現在,在項目/屬性中,我可以在IIS Express和本地ISS之間切換(用於調試/生產)。
嘗試這個:
public void Configuration(IAppBuilder app)
{
var hubConfiguration = new HubConfiguration();
hubConfiguration.EnableDetailedErrors = true;
hubConfiguration.EnableJavaScriptProxies = true;
app.MapSignalR("/TestApp", hubConfiguration);
}
現在,這應該告訴您的應用程序將SignalR進程映射到您/ TestApp的物理位置。 以我的經驗,使用直接的app.MapSignalR();
大約有30%的時間可用,其余時間,我必須像上面一樣使用顯式的位置聲明。
我發現了一些可以使其工作的東西。 它與OwinStartup中的映射無關(在測試后,我發現它在調試過程中被調用但並未停止)。
在SignalR的js源文件中進行挖掘之后,我發現此函數將初始化集線器連接:
function hubConnection(url, options) {
/// <summary>Creates a new hub connection.</summary>
/// <param name="url" type="String">[Optional] The hub route url, defaults to "/signalr".</param>
/// <param name="options" type="Object">[Optional] Settings to use when creating the hubConnection.</param>
var settings = {
qs: null,
logging: false,
useDefaultPath: true
};
$.extend(settings, options);
if (!url || settings.useDefaultPath) {
url = (url || "") + "/signalr";
}
return new hubConnection.fn.init(url, settings);
}
如您所見,它帶有一個url參數。 因此,當我使用以下代碼初始化集線器時:
var connection = $.hubConnection('/TestApp/');
現在可以使用了。 現在,我剛剛編寫了一個簡單的服務器端,用於檢查天氣,它應該初始化此參數(如果它在子目錄中運行),然后將該值注入HTML頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.