家
论坛
新职位
搜索论坛
什么是新的
新职位
新的个人资料帖子
最新活动
会员
目前的访客
新的个人资料帖子
搜索个人资料帖子
VB.NET社区
登录
寄存器
什么是新的
搜索
搜索
仅搜索标题
通过:
新职位
搜索论坛
Menu
Log in
Register
安装应用
安装
家
论坛
C#
远程处理
在远程处理中使用回调
您正在使用过期的浏览器。它可能无法正确显示此网站或其他网站。
您应该升级或使用
替代浏览器
.
回复主题
信息
<blockquote data-quote ="smit_a" data-source="post: 3969" data-attributes="member: 9163"><p>Hi Everybody,</p><p>我想在远程模式下使用具有回调的函数。</p><p>1)我有一个共享的类库,其中包含一个包含回调的函数</p><p>2)服务器作为独立应用程序,用于从共享类库中进行会话</p><p>3)客户端作为独立应用程序,它从serer获取会话,然后在其上调用函数</p><p> 我的代码摘要是:</p><p>SharedLibrary:</p><p> 命名空间TestClassLibrary</p><p>{</p><p> 公共类Class1:MarshalByRefObject</p><p> {</p><p> 公共委托void NotifyCallback(string s);</p><p> 公共无效SelectWithClassDialog(字符串消息,NotifyCallback回调,字符串标题)</p><p> {</p><p> Console.WriteLine(" SelectWithClassDialog");</p><p> Console.WriteLine(msg);</p><p> Console.WriteLine(title);</p><p> 如果(回调!= 空值)</p><p> s_notify(回调);</p><p> }</p><p> }</p><p> 公共类TestSession:MarshalByRefObject</p><p> {</p><p> 内部TestSession()</p><p> {</p><p> }</p><p> 新的内部void initialize()</p><p> {</p><p> _cls1 =新的Class1();</p><p> }</p><p> 私人Class1 _cls1;</p><p> 公共Class1 Class1</p><p> {</p><p> get</p><p> {</p><p> return _cls1;</p><p> }</p><p> }</p><p> 静态私有TestSession theSession;</p><p> 公共静态TestSession GetSession()</p><p> {</p><p> 锁(typeof(TestSession))</p><p> {</p><p> 如果(theSession == 空值)</p><p> {</p><p> theSession = new TestSession();</p><p> theSession.initialize();</p><p> }</p><p> }</p><p> 返回会话;</p><p> }</p><p>} ServerCode:</p><p>namespace TestServer</p><p>{</p><p> TestServer类</p><p> {</p><p> 静态void Main()</p><p> {</p><p> 线程serverThread = new Thread(new ThreadStart(Run));</p><p> serverThread.Start();</p><p> }</p><p> 公共静态无效Run()</p><p> {</p><p> int端口= 1234;</p><p> TestSession theSession = TestSession.GetSession();</p><p> LifetimeServices.LeaseTime = System.TimeSpan.FromDays(10000);</p><p> </p><p> //创建一个自定义FormatterSinkProvider,以便我们可以设置其安全性类型</p><p> //过滤为完整。这对于反序列化ObjectRef是必需的</p><p> SoapServerFormatterSinkProvider provider =新的SoapServerFormatterSinkProvider();</p><p> provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;</p><p></p><p> //创建IDictionary以设置通道实例上的端口。</p><p> IDictionary道具= new Hashtable();</p><p> props["port"] = port;</p><p></p><p> //使用给定的提供程序和属性创建一个新的HTTP通道</p><p> HttpChannel channel =新的HttpChannel(props,null,provider);</p><p> ChannelServices.RegisterChannel(channel,false);</p><p></p><p> //导出会话对象</p><p> 远程处理 Services.Marshal(theSession,"TestSession");</p><p> //创建服务器对象供客户端连接</p><p> 远程处理 Configuration.RegisterWellKnownServiceType(</p><p> typeof(ClientComms),</p><p> "RemoteServer",</p><p> WellKnownObjectMode.Singleton);</p><p></p><p> Thread.Sleep(Timeout.Infinite);</p><p> }</p><p> }</p><p>}</p><p></p><p>Client code:</p><p>namespace Client</p><p>{</p><p> class Program</p><p> {</p><p> 私有静态TestSession theSession = 空值;</p><p> 静态TestClassLibrary.NotifyCallback ip = init_proc_body;</p><p> 静态void Main()</p><p> {</p><p> Console.WriteLine("Getting TestSession对象...");</p><p> theSession =(TestSession)Activator.GetObject(typeof(TestSession)," http:// localhost:1234 / TestSession");</p><p> 如果(theSession == 空值)</p><p> {</p><p> Console.WriteLine(&”找不到会话对象。出口。");</p><p> return;</p><p> }</p><p> Console.WriteLine(&” Got Session对象");</p><p> theSession.Class1.SelectWithClassDialog("test", ip, "test_str"); //这里有异常</p><p> }</p><p> 公共静态无效init_proc_body(String s)</p><p> {</p><p> Console.WriteLine("Inside callback");</p><p> Console.WriteLine(s);</p><p> }</p><p> }</p><p>}</p><p> 在客户端中,我试图调用函数SelectWithClassDialog("test", <strong>ip</strong>, "test_str&”);在这句话我会得到一个例外</p><p></p><p>未处理System.Reflection.TargetInvocationException</p><p> HResult = -2146232828</p><p> 调用目标已抛出Message = Exception。</p><p> 来源= mscorlib</p><p> InnerException:System.IO.FileNotFoundException</p><p> HResult = -2147024894</p><p> 消息=无法加载文件或程序集'客户端,版本= 1.0.0.0, 文化=中性,PublicKeyToken =空'或其依赖项之一。的 系统找不到指定的文件。</p><p> 来源= mscorlib</p><p> FileName=客户端,版本= 1.0.0.0, Culture=neutral, PublicKeyToken=null</p><p> 如果我在非远程模式下运行客户端程序,那么它将正常工作。 远程处理模式,我直接从客户端中的共享库进行会话 应用程序,然后调用resp。功能)</p><p></p><p>如果我像SelectWithClassDialog("test", <strong>null</strong>, "test_str"); </p><p></p><p>then it works fine.</p><p>所以我认为问题在于远程模式下的回调。</p><p>任何人都可以帮助如何使用SelectWithClassDialog("test", <strong>ip</strong>, "test_str&”);在带有回调的远程模式下。</p><p> 我是C#的新手,并停留在这一点,非常感谢您的帮助。在此先感谢您。</p></blockquote><p></p>
Insert quotes…
验证
发表回复
家
论坛
C#
远程处理
在远程处理中使用回调
本网站使用Cookie来帮助个性化内容,调整您的体验并在注册时保持登录状态。
继续使用本网站,即表示您同意我们使用cookie。
接受
了解更多…
最佳
底部