我正在玩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
有什么想法吗?
答案 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)
**这是包含您的服务器的项目/类库。 (即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