集线器连接在多个WebBrowser控件WPF中失败

时间:2020-05-22 09:28:41

标签: javascript c# signalr signalr-hub

我有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

0 个答案:

没有答案