Remoting Class Factory 问题

问题描述

大家好,我想请教一个问题,我写了一个Remoting服务程序,服务我采用ClassFactory模式来生成远程对象(便于服务扩展),现在我遇到的问题是,代码在本地调试和局域网内调试都是正常的,但是把服务程序放在一台公网的服务器上面,就发生了问题,客户端可以成功获取远程类工厂接口对象,通过接口方法也可以获取远程的接口对象,但是在执行这个接口方法的时候就出错了,错误是一个socket错误:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。代码如下:类工厂接口:publicinterfaceIFactory{IAuthenticateGetAuthenticate();}远程对象接口:publicinterfaceIAuthenticate{byte[]authOperator(stringargOperatorName,stringargPassword,refstringerrmsg);byte[]authUser(stringargUserName,stringargPassword,refstringerrmsg);}类工厂实现:publicclassFactory:MarshalByRefObject,IFactory{publicFactory(){}publicIAuthenticateGetAuthenticate(){IAuthenticateresult=newAuthenticate();returnresult;}}远程类实现:publicclassAuthenticate:MarshalByRefObject,IAuthenticate{publicAuthenticate(){////TODO:在此处添加构造函数逻辑//}publicbyte[]authOperator(stringargOperatorName,stringargPassword,refstringerrmsg){byte[]result=null;/**业务代码*/returnresult;}publicbyte[]authUser(stringargUserName,stringargPassword,refstringerrmsg){byte[]result=null;/**业务代码*/returnresult;}}发布我使用配置文件的方式代码:stringconfigfilename="remoteconsole.exe.config";RemotingConfiguration.Configure(configfilename);配置文件如下:<?xmlversion="1.0"encoding="utf-8"?><configuration><system.runtime.remoting><application><channels><channelref="tcp"port="8085"/></channels><service><wellknownmode="Singleton"type="Factory.Factory,Factory"objectUri="Factory"/></service></application></system.runtime.remoting></configuration>客户端调用代码:RemoteInterFace.IFactoryobj=(RemoteInterFace.IFactory)Activator.GetObject(typeof(RemoteInterFace.IFactory),string.Format("tcp://{0}:{1}/Factory",this.cbServer.Text.Trim(),nPort));RemoteInterFace.IAuthenticateia=Common.RemoteFactory.GetAuthenticate();byte[]token=ia.authUser(this.tbUserName.Text.Trim(),this.tbPassword.Text.Trim(),referrmsg);//执行这个方法出错。ia对象我单步调试看了一下信息,远程随即生成Url也是有的。不知道是什么原因,请大家帮忙看一下。

解决方案

解决方案二:
SFUP楼主
解决方案三:
楼主还是到http://www.leadnt.org问去吧.
解决方案四:
继续等待,顶
解决方案五:
是不是服务器没有配好?开了服务没?用tcp你得考虑防火墙
解决方案六:
希望是服务器配置的问题,但是为什么获取Factory对象是可以,而且也是执行Factory的方法,说明8085端口没有问题
解决方案七:
自己顶一下
解决方案八:
怎么没有人帮我解答?
解决方案九:
ia=obj.GetAuthenticate();RemoteInterFace.IAuthenticateia=Common.RemoteFactory.GetAuthenticate();不知道你这句是什么意思,为什么有了obj而不用?
解决方案十:
publicIAuthenticateGetAuthenticate(){IAuthenticateresult=newAuthenticate();returnresult;}可能有问题,感觉newAuthenticate()不妥建议:factory的构造函数加一IAuthenticate类型参数得到远程对象后ia=obj.GetAuthenticate();传到工厂中
解决方案十一:
引用4楼ojekleen的回复:

用tcp你得考虑防火墙

这句话有道理如果是外网的话,还是socket或者webservices吧感觉remoting在内网用比较好
解决方案十二:
我也碰到这个问题,如果楼主解决了,请上来说一下。下面是我的问题:http://topic.csdn.net/u/20080703/17/904cd11b-6a60-467e-80ff-542e20341e79.html
解决方案十三:
我也碰到这个问题,如果楼主解决了,请上来说一下。下面是我的问题:http://topic.csdn.net/u/20080703/17/904cd11b-6a60-467e-80ff-542e20341e79.html
解决方案十四:
代码有点乱。。。用格式把代码再发一下。这样才有人帮你看。
解决方案十五:
是否部署在多个IP的机器上,CAO生成的对象可能绑在内网的那个IP地址。

时间: 2024-09-19 20:36:20

Remoting Class Factory 问题的相关文章

我所理解的Remoting(3):创建CAO Service Factory使接口和实现相互分离

我们知道对于Remoting,有两种不同的Activation模式:Server Activation和Client Activation.他我在前面的系列文章中分析.比较了这两种不同激活方式的区别:Marshaling方式,远程对象创建的时机,状态的保持,生命周期的管理. 在编程模式方面Server Activation和Client Activation也具有一定的差异:为一个SAO(server activated object)和一个CAO(client activated object

我所理解的Remoting(2):远程对象生命周期的管理[上篇]

1.CLR的垃圾回收机制 在.NET中提到对象的生命周期,我们会不由自主地想到CLR的垃圾回收.在运行一个.NET程序过程中,我们通过某种方式,比如通过new操作符,通过反序列化,通过反射机制,创建一个对象,CLR在为这个对象在托管堆中开辟一块内存空间.随着程序的运行,创建的对象越来越多,托管堆中的可用的内存越来越少,必须有一种机制来判断被分配在托管堆中的对象那些已经不被使用,以及进行对这些对象占用的内存进行回收.这种机制被称为CLR自动内存管理,也就是我们常说的垃圾回收.为了说清楚远程对象的生

如何通过Remoting实现双向通信

Remoting是NET平台下比较成熟高效的分布式技术,我们习惯采用传统的远程调用的方式使用Remoting.在客户端所在的Application Domain,我们通过Proxy(Transparent Proxy)远程地跨Application Domain调用一个方法.当来自Client端的调用请求通过Proxy到达Server端所在的Application Domain后,Remoting Infrastructure在Server 端激活(Activate)相应的远程对象(一个继承子S

我所理解的Remoting(1):Marshaling &amp; Activation[上篇]

什么是Marshaling &Activation 对任何一项分布式技术(Distributed Technology),比如Remoting,XML Web Service,Enterprise Service,Marshaling和Activation(对于Marshaling,我实在是找不到一个比较贴切的中文短语来翻译,很多书把它翻译成封送,我总觉得很别扭,所以在这里我就直接用英文Marshaling,如果读者有较好的翻译,麻烦通知我一下)都是必须要解决的问题.本Blog主要讲述的是在Re

我所理解的Remoting (2) :远程对象的生命周期管理[下篇]

在上一篇文章中([原创]我所理解的Remoting(2):远程对象生命周期的管理-Part I),我简要的讲述了CLR的垃圾回收机制和Remoting 基于Lease的对象生命周期的管理.在这篇文章中,我们将以此为基础,继续我们的话题.在文章的开始,我将以我的理解详细地讲述Remoting中两个重要的概念--Lease和Sponsorship.然后我通过一个Sample,为大家演示如何以不同的方法延长远程对象的生命周期. 我们先不谈远程对象.本地对象. 不管是远程的对象,还是本地对象,都对于程序

我所理解的Remoting(1):Marshaling &amp; Activation[下篇]

在上面一片文章([原创]我所理解的Remoting(1):Marshaling & Activation - Part I),我花了大量的文字来来描述了Remote Object如何通过Marshaling的过程从Server端所在的Application Domain经过相关的转换(Transformation)传递到Client所在的Application Domain供Client调用: 以及Client的调用请求如何在Activate处于Server端Application Domain

求解决org.springframework.beans.factory.BeanCreationException

问题描述 dwr和spring整合时出的问题,请问有谁知道这是怎么回事呢? 具体代码如下: dwr.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">

工厂设计模式 Factory

Factory 主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类. 例如:汽车销售商场 该模式将创建对象的过程放在了一个静态方法中来实现.在实际编程中,如果需要大量的创建对象,该模式是比较理想的. public class Demo1 { public static void main(String[] args) { System.out.println("买宝马"); Car bmw = CarFactory("BMW"); bmw.run(

[Remoting]当client不复存在而RemoteObject并不知道时的处理办法

[Remoting]当client不复存在而RemoteObject并不知道时的处理办法编写者:郑昀@ultrapower 20050518 问题:"singleton服务中客户端意外退出或网络故障时,服务器端如何知道,并作相应的业务层处理".背后的故事:对于这个问题,http://www.dotnetjunkies.com/Tutorial/BFB598D4-0CC8-4392-893D-30252E2B3283.dcik有一个描述,他针对这种情况"Item 3) The