服务器端:
public SvrObject:MarshalByRefObject,ISvrObject
{
private string name = "initialize"; //实例化1
public SvrObject(string Name){ name = Name;} //实例化2
public SvrObject(){}
public string GetName() { return name; }
}//工厂
public SvrObjectFactory:MarshalByRefObject,ISvrObjectFactory
{
public ISvrObject CreateInstance(string Name) { return new SvrObject(Name); }
}客户端:
public ISvrObject GetSvrObject1()
{
string uri = "http://www.abc.com:8080/SvrObjectFactory.rem";
return ((ISvrObjectFactory)Activator.GetObject(typeof(ISvrObjectFactory), uri)).CreateInstance("MyName");
}public ISvrObject GetSvrObject2()
{
string uri = "http://www.abc.com:8080/SvrObject.rem";
return ((ISvrObject)Activator.GetObject(typeof(ISvrObject), uri));
}public void GetName1()
{
ISvrObject obj = SvrObject();
obj.GetName(); //执行到这几时报错:远程服务器返回错误: (400) 错误的请求
}public void GetName2()
{
ISvrObject obj = SvrObject2();
obj.GetName(); //执行到这几时,正常!
}如果服务器部署在内部网,上面代码没有问题,但是搬到公网就出问题,难道跟域有关?
考虑过跟Remoting的生命周期有关,但设置了
<lifetime
leaseTime="5M"
sponsorshipTimeOut="2M"
renewOnCallTime="2M"
leaseManagerPollTime="10S"
/>
后问题仍然存在。请高手帮忙!
public SvrObject:MarshalByRefObject,ISvrObject
{
private string name = "initialize"; //实例化1
public SvrObject(string Name){ name = Name;} //实例化2
public SvrObject(){}
public string GetName() { return name; }
}//工厂
public SvrObjectFactory:MarshalByRefObject,ISvrObjectFactory
{
public ISvrObject CreateInstance(string Name) { return new SvrObject(Name); }
}客户端:
public ISvrObject GetSvrObject1()
{
string uri = "http://www.abc.com:8080/SvrObjectFactory.rem";
return ((ISvrObjectFactory)Activator.GetObject(typeof(ISvrObjectFactory), uri)).CreateInstance("MyName");
}public ISvrObject GetSvrObject2()
{
string uri = "http://www.abc.com:8080/SvrObject.rem";
return ((ISvrObject)Activator.GetObject(typeof(ISvrObject), uri));
}public void GetName1()
{
ISvrObject obj = SvrObject();
obj.GetName(); //执行到这几时报错:远程服务器返回错误: (400) 错误的请求
}public void GetName2()
{
ISvrObject obj = SvrObject2();
obj.GetName(); //执行到这几时,正常!
}如果服务器部署在内部网,上面代码没有问题,但是搬到公网就出问题,难道跟域有关?
考虑过跟Remoting的生命周期有关,但设置了
<lifetime
leaseTime="5M"
sponsorshipTimeOut="2M"
renewOnCallTime="2M"
leaseManagerPollTime="10S"
/>
后问题仍然存在。请高手帮忙!
public void GetName1()
{
ISvrObject obj = GetSvrObject1();
obj.GetName(); //执行到这几时报错:远程服务器返回错误: (400) 错误的请求
}
public void GetName2()
{
ISvrObject obj = GetSvrObject2();
obj.GetName(); //执行到这几时,正常!
}
但是你的
string uri = "http://www.abc.com:8080/SvrObjectFactory.rem";
改成
string uri = "http://www.abc.com:8080/SvrObjectFactory.soap";
試試!
可能是防火牆的原因吧,沒有實際碰到,也說不明白原因。
如樓主解決了,上來說一下解決方法吧。
其實你這個工廠沒有必要MarshalByRefObject吧?而且你注冊的應該是SvrObject,因為你傳輸的就是SvrObject,而並非SvrObjectFactory.
不知道我這樣子說,有沒有說清楚!
我想应该不是这个问题。
我把客户端也安装到了外网的服务器上,执行仍然是这个问题,但如果服务器端和客户端都在本地(局域网)
就没有问题。纳闷,难道跟权限有空。
寫到Web.Config中,根本就不需要你寫那個Global.asax了。