私は XSockets.NET をいじっていますが、単純な問題であるべきもののデバッグに多くの時間を費やしました。XSockets.DevServer というプロジェクトと、そのプロジェクト内の DebugInstance というクラスを作成する XSockets に付属の標準テンプレートを使用しています。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
は null であるという事実です。私が知りたいのは、その最も近い原因です。つまり、なぜComposeMe()
それを割り当てないのかということです。どうやら、XSockets がプラグイン アーキテクチャをサポートするために使用している自家製の IOC は、 のインスタンスを見つけることになっているようですがIXBaseServerContainer
、明らかにそうではありません。その理由はわかりません。ソースがないので、候補が何であるかさえわかりませんIXBaseServerContainer
。
EDIT 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
何かご意見は?