我有WPF应用程序。在此应用程序中,我正在动态添加WebBrowser控件。 signalR聊天网站在WebBrowser控件中呈现。问题只是在WPF中一次仅建立一个集线器连接。例如,如果我在WPF中有两个WebBrowser控件,则一个将能够连接到集线器,而第二个将失败。 但是,当我在IE中打开两个选项卡时,两个选项卡都可以建立到集线器的连接。请帮忙
更新:以下是我创建的演示代码示例:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TabControl x:Name="tabBrowsers" TabStripPlacement="Top" >
<TabItem Header="IM 1">
<WebBrowser x:Name="myBrowser1" Source=“URL of hub” Height="100" HorizontalAlignment="Left" Margin="5,33,0,0" VerticalAlignment="Top" Cursor="Arrow" />
</TabItem>
<TabItem Header="IM 2”>
<WebBrowser x:Name="myBrowser2" Source=“URL of hub” Height="100" HorizontalAlignment="Left" Margin="5,33,0,0" VerticalAlignment="Top" Cursor="Arrow" />
</TabItem>
</TabControl>
<Separator Height="100" Background="Transparent"/>
</StackPanel>
</Window>
集线器连接Javascript代码:
$.connection.hub.start().done().fail();
因此在上面的演示代码中,myBrowser1将能够连接到集线器,但不能连接到myBrowser2。
我进一步调查发现,如果我在两个单独的WPF应用程序中运行两个浏览器控件,则两者都可以成功连接到集线器。经过这些测试之后,我的假设是SignalR限制每个exe /进程的单个集线器连接。我希望有一些方法可以克服这个问题。
编辑:我发现给定的波纹管代码可以帮助我创建连接。
`$.connection.hub.start({json: true})`
我还将startup.cs
文件中的设置更改为EnableJSONP = true
,这可能是由于WPF使用IE作为其Web浏览器控件的引擎。但是我无法使用Web浏览器控件从两个选项卡发送消息。我正在接收消息,但无法发送。
编辑:我发现一个问题,也有类似的问题。 Second WebBrowser control with SignalR freezes javascript