我想实现客户端不同的类都调用同一个webservice类的GetTable()方法。在webservice中判断调用者的类型,然后生成对应的数据访问类,调用数据访问类的GetTable()方法。请问可以实现吗
在webservice中判断调用者的类型
这个是啥意思?让webservice自动判断吗?
不可能吧?建议你在webservice的方法加个参数,根据参数的不同动态加载会不会好一点
namespace SyncWebService
{
///
/// DataSyncWebService 的摘要说明
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[System.ComponentModel.ToolboxItem(false)]
public class DataSyncWebService : System.Web.Services.WebService
{
public struct FieldDefine
{
public string OldName;
public string NewName;
}
string _error = string.Empty;
DataSyncDriver _driver = null;
class Params
{
public static string DllName = "SyncDriver";
public static string DllPath
{
get
{
return string.Format(AppDomain.CurrentDomain.BaseDirectory + "bin\\{0}.dll", DllName);
}
}
public static string ClassFullName = "WebServiceDriver.WSDriver";
}
class X
{
public static string DllName = "DllName";
public static string ClassFullName = "ClassFullName";
}
public DataSyncWebService()
{
InitParams();
InitDriver();
}
/// <summary>
/// 初始化驱动
/// </summary>
private void InitDriver()
{
try
{
//反射生成设备服务对象
object obj = Assembly.LoadFile(Params.DllPath).CreateInstance(Params.ClassFullName);
if (obj == null)
{
_error = "驱动加载失败";
_driver = null;
return;
}
_driver = obj as DataSyncDriver;
if (_driver == null)
{
_error = "驱动格式错误";
return;
}
}
catch (Exception ex)
{
_error = ex.Message;
_driver = null;
}
}
/// <summary>
/// 初始化参数
/// </summary>
private void InitParams()
{
if (!GlobalParam.AddANewParam(X.DllName, Params.DllName))
{
Params.DllName = GlobalParam.GetAParam(X.DllName);
}
if (!GlobalParam.AddANewParam(X.ClassFullName, Params.ClassFullName))
{
Params.ClassFullName = GlobalParam.GetAParam(X.ClassFullName);
}
}
}
}
自己看吧,我自己写的,Webservice中使用反射
DataSyncDriver 是基础类,抽象的
namespace SyncWebService
{
/// <summary>
/// DataSyncWebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[System.ComponentModel.ToolboxItem(false)]
public class DataSyncWebService : System.Web.Services.WebService
{
public struct FieldDefine
{
public string OldName;
public string NewName;
}
string _error = string.Empty;
DataSyncDriver _driver = null;
class Params
{
public static string DllName = "SyncDriver";
public static string DllPath
{
get
{
return string.Format(AppDomain.CurrentDomain.BaseDirectory + "bin\\{0}.dll", DllName);
}
}
public static string ClassFullName = "WebServiceDriver.WSDriver";
}
class X
{
public static string DllName = "DllName";
public static string ClassFullName = "ClassFullName";
}
public DataSyncWebService()
{
InitParams();
InitDriver();
}
/// <summary>
/// 检查驱动
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
private bool CheckDriver(ref string msg)
{
if (_driver == null)
{
msg = _error;
return false;
}
return true;
}
/// <summary>
/// 初始化驱动
/// </summary>
private void InitDriver()
{
try
{
//反射生成设备服务对象
object obj = Assembly.LoadFile(Params.DllPath).CreateInstance(Params.ClassFullName);
if (obj == null)
{
_error = "驱动加载失败";
_driver = null;
return;
}
_driver = obj as DataSyncDriver;
if (_driver == null)
{
_error = "驱动格式错误";
return;
}
}
catch (Exception ex)
{
_error = ex.Message;
_driver = null;
}
}
/// <summary>
/// 初始化参数
/// </summary>
private void InitParams()
{
if (!GlobalParam.AddANewParam(X.DllName, Params.DllName))
{
Params.DllName = GlobalParam.GetAParam(X.DllName);
}
if (!GlobalParam.AddANewParam(X.ClassFullName, Params.ClassFullName))
{
Params.ClassFullName = GlobalParam.GetAParam(X.ClassFullName);
}
}
}
}
自己看吧,我自己写的,Webservice中使用反射
DataSyncDriver 是基础类,抽象的