web service-webservice 中使用反射

问题描述

webservice 中使用反射

我想实现客户端不同的类都调用同一个webservice类的GetTable()方法。在webservice中判断调用者的类型,然后生成对应的数据访问类,调用数据访问类的GetTable()方法。请问可以实现吗

解决方案

在webservice中判断调用者的类型
这个是啥意思?让webservice自动判断吗?
不可能吧?建议你在webservice的方法加个参数,根据参数的不同动态加载会不会好一点

解决方案二:

使用反射动态添加webservice
使用axis轻松调用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 是基础类,抽象的

时间: 2016-07-04

web service-webservice 中使用反射的相关文章

JAVA+AXIS客户端调用Asp.net Web Service过程中遇到的问题及解决方法

        背景:公司与某运营商合作,运营商提供了接口文档,在文档中规定了数据流是双向的,运营商和公司之间的通讯采用Web Service方式,双方互为客户端和服务器端.这次遇到的问题,就是运营商的客户端调用我公司服务端的Web Service时出现的情况.需要特别说明的是:运营商有几十家合作伙伴,所以客户端的代码是不能因为某一家合作伙伴而修改的,各合作伙伴的WEB SERVICE开发环境也不相同,大部分都是用JAVA语言开发,而我公司是用VS2005开发的.         过程:    

Mule web service调用中的复杂类型传递

  官网上很辛苦在一个旮旯里找到如何向 Mule暴露的axis web service 传递复杂数据类型 ,http://www.mulesource.org/pages/viewpage.action?pageId=4678, 官网上只提供了原理,自己补充了一下客户端测试代码,部分服务类做了修改.       类清单:   Person: 数据类,测试复杂数据类型的传递   PersonService: 服务接口类   PersonServiceImpl: 服务实现类.   PersonSer

Web Service中保持ASP.net的状态

asp.net|web 简介      网络程序开发者们遇到的最普遍的问题就是如何在无状态的基于HTTP协议的交互中保持状态信息.有许多聪明的办法可以解决HTTP协议的无状态问题,例如对每个请求重复发送应用程序数据包.使用HTTP认证机制来将请求映射到特定的用户.使用Cookie来存储一系列请求的状态等.在ASP.net技术中提供了一个非常有效的方案来保持状态,该方案隐藏了所有高难度的,具有挑战性的工作的细节,用户只需简单地使用System.Web.SessionState.HttpSess

使用BizTalk Adatper for Web Service中的策略与技巧

web|策略|技巧 在使用BizTalk Adapter for Web Service的EAI解决方案中,不同的.分离的组件被整合在一起完成统一的商业逻辑.在解决方案中,各种组件必须很好的在一起工作.有两条关键的原则(key principle)可以使得你的BizTalk解决方案更完美: KP1:在搭建解决方案时,每一步实现均进行测试: KP2:丛最前端开始向后端推进,或丛最后端开始并向前端推进,一步一步进行增量开发.每进行一步增量开发,均要保证增量后解决方案可以使用. 下面分别加以描述,并对

在WebSphere Portlet Factory中调用Web Service

通过 WebSphere Portlet Factory(WPF),开发者非常方便实现 Web Service 和 Portlets 的通信.开发者无需花费大量的时间去学习 SOAP,WSDL,XML schema(xsd) 等 Web Service 技术,使用 WPF 即可开发出健壮.功能强大的 Web Service 和实现对各种风格的 Web Service 的调用.WPF 隐藏了 Web Service 的内部实现细节,通过 WPF 的丰富的构建器自动生成 Web Service 和实

通过压缩SOAP改善XML Web service性能

web|xml|性能|压缩 压缩文本是一个可以减少文本内容尺寸达80%的过程.这意味着存储压缩的文本将会比存储没有压缩的文本少80%的空间.也意味着在网络上传输内容需要更少的时间,对于使用文本通信的客户端服务器应用程序来说,将会表现出更高的效率,例如XML Web services. 本文的主要目的就是寻找在客户端和服务器之间使交换的数据尺寸最小化的方法.一些有经验的开发者会使用高级的技术来优化通过网络特别是互联网传送的数据,这样的做法在许多分布式系统中都存在瓶颈.解决这个问题的一个方法是获取更

Web Service——面向服务编程的方式之一

    在上篇博客中,我们认识了面向服务编程.本篇博客,将学习Web Service,它属于实现面向服务编程的方式之一.     [一.什么是Web Service?]     Web Service也叫XML WebService,是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.     从生活中举一个简单的例子,我们平时在浏览不同的网站的时候,都会看见很多相同网站的身影,换句话说,我们在各种网站都可以看见百度.淘宝等,这便是他们将自己

Web Service学习总结

Web service到底是什么,在什么情况下你应该使用Web service:      研究一下当前的应用开发程序,你会发现一个绝对的倾向:人们开始偏爱基于浏览器的客户端应用程序.这当然不是因为客户端能够提供更好的用户界面,而是因为它能够避免花在桌面应用程序发布上的高成本.发布桌面应用程序成本很高,一半是因为应用程序安装和配置的问题,另一半是因为客户端和服务器之间通信的问题.      传统的Windows客户应用程序使用DCOM来与服务器进行通信和调用远程对象.配置好DCOM使其在一个大型

web service接口 wsdl和asmx有什么区别(实在没分了。。抱歉)

问题描述 web service接口 wsdl和asmx有什么区别(实在没分了..抱歉) http://192.168.1.210:8080/law/SearchPort?wsdl和http://localhost:2610/NewPrint/WebService/NewService.asmx 格式的接口有什么区别调用方式有区别吗(wsdl和asmx) 解决方案 没有区别,只是后缀名的区别. Web Service也叫XML Web Service WebService是一种可以接收从Inte