0

私は 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

何かご意見は?

4

2 に答える 2

1

ケン、

XSockets.NET のプラグイン フレームワークが「プラグイン」を見つけられない場合、作成するものは何もありません。この理由は、IIS Production インスタンスに「プラグイン」がデプロイされていないためだと思いますか?

構成ファイル (web.config) の appSettings セクションに次の要素を追加する必要があります。

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

「私の場合」では、内部に XSockets.NET プラグイン (プロトコル、ハンドラー/コントローラー) があります。

私の Web サイトの/XSockets/XSocketServerPlugnsフォルダー。

そのフォルダーに次のプラグイン (.dll) が必要です。

  1. XSockets.Core.Communication
  2. XSockets.Core
  3. XSockets.Extensibility.Handlers
  4. XSockets.Extensibility.Interceptors
  5. Xsockets.External
  6. XSockets.プロトコル
  7. XSockets.Server
  8. XSockets.DevelopmentServer **

** これは、あなたのサーバーを含むプロジェクト/クラス ライブラリです。(つまり、DebugInstance)

サーバーを構成する場合は、構成ローダー クラスを作成する必要があります。情報については、この URL http://xsockets.net/api/net-c/creating-custom-configuration-pluginを参照するか、単に電子メールを送信してください。 contact@xsockets.net でお手伝いします。

さらにサポートが必要な場合は、お知らせください。

敬具

于 2012-11-06T14:13:04.663 に答える
0

まず、コンソール アプリケーションを実行している場合は、既定の .NET 4 クライアント プロファイルではなく .NET 4 に切り替えます (まだ行っていない場合)。

2番。サーバーを起動するプロジェクトに追加する参照を知るためのより良い方法を提供します。その間、パッケージ マネージャー コンソールでこれを実行して、必要な参照を確認できるはずです。

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

あなたは私の電子メールを持っているので、私に連絡してください。スカイプ会議またはそれについてもっと話すことができます.

よろしく Uffe、チーム XSockets

于 2012-11-06T21:00:07.750 に答える