XSockets.DevServer.DebugInstance()中的NullReferenceException

时间:2012-11-06 02:02:52

标签: xsockets.net

我正在玩XSockets.NET,我花了太多时间调试应该是一个简单的问题。我正在使用XSockets附带的标准模板,它创建了一个名为XSockets.DevServer的项目,以及该项目中名为DebugInstance的类。当我在我的web项目中托管这个DebugInstance类时,所有似乎都按预期工作。但是,当我尝试在XSockets.Debug.Console项目中托管它时,或者当我尝试让它在我的生产IIS实例上运行时,我在下面的代码中得到一个NullReferenceException:

    [ImportOne(typeof(IXBaseServerContainer))]
    public IXBaseServerContainer wss { get; set; }

    public DebugInstance()
    {
        try
        {
            Debug.AutoFlush = true;
            this.ComposeMe();

            // NullReferenceException on the next line - wss apparently never gets set.
            wss.OnServersStarted += wss_OnServersStarted;
            wss.OnServerClientConnection += wss_OnServerClientConnection;
            wss.OnServerClientDisconnection += wss_OnServerClientDisconnection;
            wss.OnError += wss_OnError;
            wss.OnIncommingTextData += wss_OnIncommingTextData;
            wss.OnOutgoingText += wss_OnOutgoingText;
            wss.OnServersStopped += wss_OnServersStopped;
            wss.StartServers();
        }
        catch (Exception ex)
        {
            Debug.WriteLine("Exception while starting server: " + ex);
            Debug.WriteLine("Press enter to quit");
        }
    }

显然问题发生在this.ComposeMe()内,但是没有故障排除信息,而且由于XSockets显然不是开源的,我无法单步执行代码来找出问题所在

编辑:要清楚,我知道NullReferenceException是什么。在这种情况下,它的直接原因是wss为空。我想知道的是它的近因,即为什么ComposeMe()没有分配它,即使这是它显然应该做的事情。显然,XSockets用来支持其插件架构的本土IOC应该找到IXBaseServerContainer的实例,但它显然不是 - 而且我不知道为什么。没有来源,我甚至不确定IXBaseServerContainer的候选人是什么。

编辑2012-11-06:这是app.config的appSettings元素的样子:

<appSettings>
  <add key="XSocketServerStartport" value="4502"/>
  <add key="UsePolicyServer" value="true"/>
  <add key="XSockets.PluginCatalog" value="XSockets\XSocketServerPlugins\"/>
  <add key="XSockets.PluginFilter" value="*.dll"/>
  <add key="XMessageInterceptorsEnabled" value="false"/>
  <add key="XErrorInterceptorsEnabled" value="false"/>
  <add key="XConnectionInterceptorsEnabled" value="false"/>
  <add key="XHandshakeInterceptorsEnabled" value="false"/>
  <add key="XSocketLogPath" value="XSockets\XSocketServerPlugins\Log"/>
  <add key="XBufferSize" value="8192"/>
</appSettings>

我在$(ProjectDir)\XSockets\XSocketServerPlugins\$(TargetDir)\XSockets\XSocketServerPlugins\个文件夹中都有下面提到的所有文件,例如:

10/29/2012  09:53 AM            15,872 XSockets.Core.Communication.dll
10/29/2012  09:53 AM            70,656 XSockets.Core.dll
10/29/2012  09:53 AM             8,192 XSockets.DevelopmentServer.dll
10/29/2012  09:53 AM            11,776 XSockets.Extensibility.Handlers.dll
10/29/2012  09:53 AM            10,240 XSockets.Extensibility.Interceptors.dll
10/29/2012  09:53 AM            23,040 XSockets.External.dll
10/29/2012  09:53 AM            24,064 XSockets.Protocol.dll
10/29/2012  09:53 AM            39,424 XSockets.Server.dll
11/05/2012  05:37 PM            12,288 XSockets.WebRTC.Prototype.Shared.Handlers.dll

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

当XSockets.NET的插件框架没有找到任何“插件”时,没有什么可以撰写。我认为这样做的原因是你的IIS生产实例中没有“插件”部署

您需要将以下元素添加到配置文件(web.config)的appSettings部分

<add key="XSockets.PluginCatalog" value="XSockets\XSocketServerPlugns\" />
<add key="XSockets.PluginFilter" value="*.dll" />

在“我的情况”中我有

中的XSockets.NET插件(协议,处理程序/控制器) 我网站上的

/ XSockets / XSocketServerPlugns 文件夹。

你应该在该文件夹中有以下插件(.dll)

  1. XSockets.Core.Communication
  2. XSockets.Core
  3. XSockets.Extensibility.Handlers
  4. XSockets.Extensibility.Interceptors
  5. Xsockets.External
  6. XSockets.Protocol
  7. XSockets.Server
  8. XSockets.DevelopmentServer **
  9. **这是包含您的服务器的项目/类库。 (即DebugInstance)

    如果要配置服务器,则需要创建配置加载程序类,请参阅此URL以获取信息http://xsockets.net/api/net-c/creating-custom-configuration-plugin,或者只是发送电子邮件至contact@xsockets.net,我们将帮助您。< / p>

    如果您需要进一步的帮助,请告诉我。

    亲切的问候

答案 1 :(得分:0)

首先,如果您正在运行控制台应用程序切换到.NET 4而不是默认的.NET 4客户端配置文件(如果尚未完成)。

二。我们将提供一种更好的方法来了解添加到启动服务器的项目的引用。 同时,您应该能够在程序包管理器控制台中运行它以查看需要哪些引用

(Get-Project XSocketHandler).Object.References | Where-Object {$_.CopyLocal -eq $true}

您有我的电子邮件,所以请与我联系,我们可以举行Skype会议或其他事情来讨论它。

此致 Uffe,Team XSockets