100分求一个三层结构问题

ycg_893 2007-08-08 02:31:50
我开发一个三层结构的系统,采用Remoting远程调用,方式是System.Runtime.Remoting.Channels.Tcp;如果服务器端和客户端都在局域网的话都没有问题(也就是客户端的访问服务器的地址为192.168.0.1),但当服务端在广域网的放(www.123456.com)时客户端访问调用远程方法,提示,远程主机没有反应(而套节字<System.Net.Sockets>是成功的,因为该软件有套节字<System.Net.Sockets>和Remoting),哪位遇到过呀!帮帮吧!
...全文
795 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
chbvb4302 2007-08-27
  • 打赏
  • 举报
回复
我也遇到過這個問題,後來發現是公司的防護牆沒有開通一個端口指向服務的斷口,你需要開通一個端口(如9000)指向你服務的一個斷口(如8782)即可!然後訪問的時候,聯接如下:tcp://serverIp+":9000"+"/serverDll"
waxcz00 2007-08-11
  • 打赏
  • 举报
回复
http://www.cnblogs.com/zhengyun_ustc/archive/2006/06/09/remoting_InvalidCredentialException.html
或者对你有价值!
ycg_893 2007-08-10
  • 打赏
  • 举报
回复
谢谢大家的帮助,我已经用其他变象方法解决了,也在网上找了不少例子,只要有构造函数就有些麻烦,跨网就无法连接.虽然问题没有解决,但还是谢谢大家!
wyc_xiaoben 2007-08-09
  • 打赏
  • 举报
回复
mark
ycg_893 2007-08-09
  • 打赏
  • 举报
回复
帮帮呀!
ycg_893 2007-08-09
  • 打赏
  • 举报
回复
我查了一些资料,应该是代码权限问题,请问代权限怎么解决
J_fenix 2007-08-09
  • 打赏
  • 举报
回复
帮顶
klmy 2007-08-09
  • 打赏
  • 举报
回复
up
jie724201 2007-08-09
  • 打赏
  • 举报
回复
这是我写的客户端,
ChannelServices.RegisterChannel(tcpclientchannel, false);

RemoteUserManagerServerObject = (UserManageServer)(Activator.GetObject(
typeof(UserManageServer),
"tcp://" + this.cbServer.Text.Trim() + ":8087/Server/UserManage"));

if (RemoteUserManagerServerObject == null)
{
MessageBox.Show("远程对象连接失败……");
}

服务器端:
/*应用程序名称*/
RemotingConfiguration.ApplicationName = "Server";

/*配置信道*/
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full;

/*发布用户管理远程对象*/
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(UserManageServer),
"UserManage",
WellKnownObjectMode.SingleCall);
好像没的什么问题的...

tepc2000 2007-08-09
  • 打赏
  • 举报
回复
up
tl0352118 2007-08-09
  • 打赏
  • 举报
回复
学习,学习
terriou786 2007-08-09
  • 打赏
  • 举报
回复
改成HttpChannel
pzrr_00 2007-08-09
  • 打赏
  • 举报
回复
看一下服务器是不是双网卡,如果是,则需要手工绑定到外网网卡上。
这个问题我以前遇到过,最后发现是双网卡的问题。
beyondjay 2007-08-09
  • 打赏
  • 举报
回复
remoting用在局域网里面,跨域没试过
zxt129 2007-08-09
  • 打赏
  • 举报
回复
客户端
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting;

public interface IFactory
{
IShareObject getIShareObject();
IShareObject getIShareObject(string IP);
}


public static ShareObject.TT NN {
get
{
if (hao == null)
{
try
{
TcpClientChannel channel = new TcpClientChannel();
ChannelServices.RegisterChannel(channel, false);
factory = (ShareObject.IFactory)Activator.GetObject(typeof(ShareObject.IFactory), "Tcp://102.178.1.257:9999/ok");
hao = factory.getIShareObject("102.178.1.257").getSqlHelper();
}
catch (Exception ex)
{
throw ex;
}
}
return hao;
}
}

IShareObject 转递对象
自己试吧,应该可以的。

showmy 2007-08-09
  • 打赏
  • 举报
回复
jf up 学习
paulyjin 2007-08-09
  • 打赏
  • 举报
回复
友情up
zxt129 2007-08-09
  • 打赏
  • 举报
回复
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Remoting.Services;



class Program
{
static void Main(string[] args)
{
try
{
if (ChannelServices.RegisteredChannels.GetLength(0) > 0)
{
foreach (IChannel channel in ChannelServices.RegisteredChannels)
{
ChannelServices.UnregisterChannel(channel);
}
}
TcpServerChannel sch = new TcpServerChannel(9999);
ChannelServices.RegisterChannel(sch,false);
ExampleTrackingHangdler example = new ExampleTrackingHangdler();
TrackingServices.RegisterTrackingHandler(example);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ShareObject.Factory), "ok", WellKnownObjectMode.SingleCall);

}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
return;
}
Console.WriteLine("启动了");
Console.ReadLine();
}
}
public class ExampleTrackingHangdler:ITrackingHandler
{
public Object observedIP = null;
public void MarshaledObject(Object obj,ObjRef or)
{
observedIP = CallContext.GetData("ObservedIP");
if(observedIP==null)
return;
if(or.ChannelInfo==null)
return;
string strAddress = (string)observedIP;
for(int i = or.ChannelInfo.ChannelData.GetLowerBound(0);i<=or.ChannelInfo.ChannelData.GetUpperBound(0);i++)
{
if(or.ChannelInfo.ChannelData[i] is ChannelDataStore)
{
foreach(string uri in ((ChannelDataStore)or.ChannelInfo.ChannelData[i]).ChannelUris)
{

int nOffset =uri.IndexOf("//")+2;
string strNewUri = uri.Substring(0,nOffset);
strNewUri += strAddress;
nOffset = uri.IndexOf(":",nOffset);
strNewUri += uri.Substring(nOffset,uri.Length-nOffset);
string[] strarray = new string[1] { strNewUri };

ChannelDataStore cds = new ChannelDataStore(strarray);
or.ChannelInfo.ChannelData[i] = cds;
}
}
}

}
public void DisconnectedObject(object obj){}
public void UnmarshaledObject(object obj,ObjRef or){}
}




这个是可以的。你试试。
bb_chen 2007-08-09
  • 打赏
  • 举报
回复
不太清楚,进来关注一下
kinglht 2007-08-09
  • 打赏
  • 举报
回复
等下,刚才没看清,你的客户端和服务器不在一个局域网吗?我忘了.netremoting不在一个局域网到底行不行,socket是肯定可以的,web service也肯定是可以的。
加载更多回复(26)

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧