将C#客户端应用程序连接到XSockets服务器时发生异常

时间:2014-01-25 12:15:31

标签: c# client xsockets.net

我正在使用XSockets在XSockets服务器和现有的C#桌面客户端应用程序之间进行双向(基于Web套接字)通信。

我在现有客户端应用程序中集成了代码,用于与XSockets服务器通信。

目前,XSocket Server作为单独的控制台应用程序启动。它开始很好没有问题。 然后我在我的C#客户端应用程序中使用以下伪代码块:

    XSocketClient client = new XSocketClient("ws://127.0.0.1:4509/MyController", "*", false);      //Error occurs right on execution of this line

    client.Open();

以下是抛出的异常快照;

Exception of type 'XSockets.Plugin.Framework.Exceptions.ExportException' was thrown

Custom Message:  Failed to load exported interfaces in assembly Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

Source: XSockets.Plugin.Framework

Stack Trace:  at XSockets.Plugin.Framework.Composable.SatifyImportsExports()

   at XSockets.Plugin.Framework.Composable.Initialize()

   at XSockets.Plugin.Framework.Composable.GetExport[T]()

Type:  System.IO.FileNotFoundException

注意:如果我创建一个新的C#windows窗体客户端项目并尝试执行此代码,它会正常执行并成功连接到XSocket服务器。 意味着我现有的客户项目中存在令人不安的事情。

这种奇怪异常的可能原因是什么?有任何想法吗?感谢

编辑:我已经注意到,如果我从我的Bin文件夹中手动删除Microsoft.Practices.EnterpriseLibrary.Validation DLL,它会引发相同类型的异常,但这次使用不同的自定义消息。我的意思是该错误与Bin文件夹中存在的其他DLL(我现有的应用程序)有关。

2 个答案:

答案 0 :(得分:2)

我昨天遇到了类似的问题并解决了它:

 Composable.ClearPluginFilters();
 Composable.AddPluginFilter("XSockets.*.dll");

在我启动应用程序并启动服务器之前调用了此代码。我知道这个问题有点老了但是如果还有其他人在这里结束了。

Source from Google Groups

答案 1 :(得分:1)

好的找到了我自己提出的问题的答案。

这个问题可能有两件事:

  1. Microsoft.Practices.EnterpriseLibrary.Validation.dll 导致Bin =>问题发布/调试文件夹。从Visual Studio项目引用列表中,右键单击 Microsoft.Practices.EnterpriseLibrary.Validation 引用,单击Properties并将[Copy Local]属性设置为false。 XSocketsClient现在已成功连接到XSockets服务器,但我现有应用程序的其他一些逻辑仍然需要Enterprise Library,即Copy Local ==> false,无法访问.Net运行时,因此每当运行时遇到代码部分时,它都会显示异常。

  2. 要解决因删除Enterprise Library引用而遇到的后续问题,我再次添加了Microsoft.Practices.EnterpriseLibrary.Validation引用,并添加了另一个DLL Microsoft.Practices.EnterpriseLibrary.Common.dll < / em>并添加了对我的客户端应用程序的引用。

  3. 现在我的客户端应用程序可以很好地连接到XSocket服务器,现在也没有包含企业库参考的问题。

    似乎企业库在运行时需要一些必要的东西,这些东西位于第二个DLL中。