服务器端:
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"
/>
后问题仍然存在。请高手帮忙!

解决方案 »

  1.   

    写错:
    public void GetName1()
    {
      ISvrObject obj = GetSvrObject1();
      obj.GetName(); //执行到这几时报错:远程服务器返回错误: (400) 错误的请求
    }
    public void GetName2()
    {
      ISvrObject obj = GetSvrObject2();
      obj.GetName(); //执行到这几时,正常!
      

  2.   

    沒有在公網上做過,遺憾沒有碰到類似情況:
    但是你的
    string uri = "http://www.abc.com:8080/SvrObjectFactory.rem"; 
    改成
    string uri = "http://www.abc.com:8080/SvrObjectFactory.soap"; 
    試試!
    可能是防火牆的原因吧,沒有實際碰到,也說不明白原因。
    如樓主解決了,上來說一下解決方法吧。
      

  3.   

    再次仔細看了一下這個問題,並下載了樓主的代碼來看了一下:
    其實你這個工廠沒有必要MarshalByRefObject吧?而且你注冊的應該是SvrObject,因為你傳輸的就是SvrObject,而並非SvrObjectFactory.
    不知道我這樣子說,有沒有說清楚!
      

  4.   

    工厂必须继承MarshalByRefObject的,不然客户端就不能访问得到。注册为SvrObjectFactory是让客户端能够调用。
    我想应该不是这个问题。
    我把客户端也安装到了外网的服务器上,执行仍然是这个问题,但如果服务器端和客户端都在本地(局域网)
    就没有问题。纳闷,难道跟权限有空。
      

  5.   

    好像是权限或防火墙的问题,本人试过Remoting内网外网都没问题
      

  6.   

    樓主的服務端Remoting配置為什么不直接放到Web.Config里呢?既然選擇IIS承載?
    寫到Web.Config中,根本就不需要你寫那個Global.asax了。
      

  7.   

    是不是服务器上有多个IP,服务弄错IP引起的