首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

100分三层结构有关问题

2012-01-29 
100分求一个三层结构问题我开发一个三层结构的系统,采用Remoting远程调用,方式是System.Runtime.Remoting.

100分求一个三层结构问题
我开发一个三层结构的系统,采用Remoting远程调用,方式是System.Runtime.Remoting.Channels.Tcp;如果服务器端和客户端都在局域网的话都没有问题(也就是客户端的访问服务器的地址为192.168.0.1),但当服务端在广域网的放(www.123456.com)时客户端访问调用远程方法,提示,远程主机没有反应(而套节字 <System.Net.Sockets> 是成功的,因为该软件有套节字 <System.Net.Sockets> 和Remoting),哪位遇到过呀!帮帮吧!

[解决办法]
路过不清楚,友情UP!
[解决办法]
用IP
[解决办法]
不清楚 友谊up
[解决办法]
学习!!
[解决办法]
不是很懂,路过,帮顶一下
[解决办法]
up
[解决办法]
广域网还是用WEB服务代替Remoting
[解决办法]
你改为HttpChannel试下
Tcp的不能穿透防火墙
你在局域网下就可以不用考虑这个问题了
但在广域网就要考虑下了
还有Http是基于Soap协议传输的
而Tcp是基于二进制流传输的

希望可以帮到你
[解决办法]
HttpChannel
[解决办法]
mark 学习
[解决办法]
你这个问题属于跨域访问问题,可以尝试把.net remoting以web服务的形式发布,个人看法!
[解决办法]
没用过remoting
[解决办法]
Remoting? 学习
[解决办法]
关注,帮顶.............
[解决办法]
看看你的防火墙,现在都什么时候了,用WCF上吧
[解决办法]
See下路由设置
mark下。
[解决办法]
remoting用在局域网里面,跨域没试过
[解决办法]
看一下服务器是不是双网卡,如果是,则需要手工绑定到外网网卡上。
这个问题我以前遇到过,最后发现是双网卡的问题。
[解决办法]
改成HttpChannel
[解决办法]
学习,学习
[解决办法]
up
[解决办法]
这是我写的客户端,
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);
好像没的什么问题的...


[解决办法]
up
[解决办法]
帮顶
[解决办法]
mark
[解决办法]
友情mark
[解决办法]
关注~~!!!
[解决办法]
不太清楚,进来关注一下
[解决办法]
修改一下.hosts文件,如果有条件在服务器上配置个双网卡试试看!
[解决办法]
等下,刚才没看清,你的客户端和服务器不在一个局域网吗?我忘了.netremoting不在一个局域网到底行不行,socket是肯定可以的,web service也肯定是可以的。
[解决办法]
不太清楚,进来关注一下
[解决办法]
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){}
}


这个是可以的。你试试。
[解决办法]
友情up
[解决办法]
jf up 学习

热点排行