我是这样部署的:
service:
BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
IDictionary props = new Hashtable();
props["port"] = 11982;
TcpChannel channel = new TcpChannel(props, clientProv, serverProv); ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.ApplicationName = "ChanceService";
RemotingConfiguration.RegisterActivatedServiceType(typeof(ATMemberType));
... ...
其中,ATCompanyType为一个DA类,有Create(创建实体,sql里的insert),Update(更新实体,sql里的update),Get(获取实体,sql里的select)... Get/Update都没有问题,能够成功获取数据,Create时就出现错误:此远程处理代理没有信道接收,这意味着服务器没有正在侦听的已注册服务器信道,或者此应用程序没有用来与服务器对话的适当客户端信道。
代码如下:
public static object CreateDA(Type type, object[] param)
{
string serverStr = "tcp://" + ConfigurationManager.AppSettings["Server"] + "/ChanceService";
object[] attrs = { new UrlAttribute(serverStr) };
try
{
Instance = Activator.CreateInstance(type, param, attrs);
}
catch (Exception e)
{
}}
... ...
ATMemberType da = (ATMemberType)DAFactory.CreateDA(typeof(ATMemberType));
if (da.Create(info)) // **** 出错 ****
return info;
参考:
public bool Create(E entity)
{
bool ret = false;
ParameterCollection pars = data.CreateParameters();
pars = pars.FromDataModel(entity, null, data.ParameterPrefix);
if (data is Oracle)
{
entity.SetValue(primaryKey, ((Oracle)data).GetSequence("SQ_" + tableName).NextVal);
ret = data.ExecuteNonQuery(pars.Format("INSERT INTO " + entity.TableName + "({0}) VALUES({1})"), pars) > 0;
}
else if (data is SqlServer)
{
int id = int.Parse(data.ExecuteScalar(pars.Format("INSERT INTO " + entity.TableName + "({0}) VALUES({1});select scope_identity() as 'id'"), pars).ToString());
entity.SetValue(primaryKey, id);
ret = id != 0;
}
return ret;
}
service:
BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
IDictionary props = new Hashtable();
props["port"] = 11982;
TcpChannel channel = new TcpChannel(props, clientProv, serverProv); ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.ApplicationName = "ChanceService";
RemotingConfiguration.RegisterActivatedServiceType(typeof(ATMemberType));
... ...
其中,ATCompanyType为一个DA类,有Create(创建实体,sql里的insert),Update(更新实体,sql里的update),Get(获取实体,sql里的select)... Get/Update都没有问题,能够成功获取数据,Create时就出现错误:此远程处理代理没有信道接收,这意味着服务器没有正在侦听的已注册服务器信道,或者此应用程序没有用来与服务器对话的适当客户端信道。
代码如下:
public static object CreateDA(Type type, object[] param)
{
string serverStr = "tcp://" + ConfigurationManager.AppSettings["Server"] + "/ChanceService";
object[] attrs = { new UrlAttribute(serverStr) };
try
{
Instance = Activator.CreateInstance(type, param, attrs);
}
catch (Exception e)
{
}}
... ...
ATMemberType da = (ATMemberType)DAFactory.CreateDA(typeof(ATMemberType));
if (da.Create(info)) // **** 出错 ****
return info;
参考:
public bool Create(E entity)
{
bool ret = false;
ParameterCollection pars = data.CreateParameters();
pars = pars.FromDataModel(entity, null, data.ParameterPrefix);
if (data is Oracle)
{
entity.SetValue(primaryKey, ((Oracle)data).GetSequence("SQ_" + tableName).NextVal);
ret = data.ExecuteNonQuery(pars.Format("INSERT INTO " + entity.TableName + "({0}) VALUES({1})"), pars) > 0;
}
else if (data is SqlServer)
{
int id = int.Parse(data.ExecuteScalar(pars.Format("INSERT INTO " + entity.TableName + "({0}) VALUES({1});select scope_identity() as 'id'"), pars).ToString());
entity.SetValue(primaryKey, id);
ret = id != 0;
}
return ret;
}
但连接外网时感觉速度确是慢