• Reporting Services动态引用WebServices发布报表


     WebClient web = new WebClient();
            web.Credentials 
    = System.Net.CredentialCache.DefaultCredentials;

            Stream stream 
    = web.OpenRead("WebServices地址");

            
    // 2. 创建和格式化 WSDL 文档。
            ServiceDescription description = ServiceDescription.Read(stream);

            
    // 3. 创建客户端代理代理类。
            ServiceDescriptionImporter importer = new ServiceDescriptionImporter();

            importer.ProtocolName 
    = "Soap"// 指定访问协议。
            importer.Style = ServiceDescriptionImportStyle.Client; // 生成客户端代理。
            importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;

            importer.AddServiceDescription(description, 
    nullnull); // 添加 WSDL 文档。

            
    // 4. 使用 CodeDom 编译客户端代理类。
            CodeNamespace nmspace = new CodeNamespace(); // 为代理类添加命名空间,缺省为全局空间。
            CodeCompileUnit unit = new CodeCompileUnit();
            unit.Namespaces.Add(nmspace);

            ServiceDescriptionImportWarnings warning 
    = importer.Import(nmspace, unit);
            CodeDomProvider provider 
    = CodeDomProvider.CreateProvider("CSharp");

            CompilerParameters parameter 
    = new CompilerParameters();
            parameter.GenerateExecutable 
    = false;
            parameter.GenerateInMemory 
    = true;
            parameter.ReferencedAssemblies.Add(
    "System.dll");
            parameter.ReferencedAssemblies.Add(
    "System.XML.dll");
            parameter.ReferencedAssemblies.Add(
    "System.Web.Services.dll");
            parameter.ReferencedAssemblies.Add(
    "System.Data.dll");

            CompilerResults result 
    = provider.CompileAssemblyFromDom(parameter, unit);

            
    // 5. 使用 Reflection 调用 WebService。
            if (!result.Errors.HasErrors)
            
    {
               
               
                Assembly asm 
    = result.CompiledAssembly;
                Type TRptService 
    = asm.GetType("ReportingService"); // 如果在前面为代理类添加了命名空间,此处需要将命名空间添加到类型前面。
                object objRptService = Activator.CreateInstance(TRptService); // 获取实例 
                
    //设置Credentials属性值(xml web service客户端的验证凭据)
                PropertyInfo pRptServiceCredentials = TRptService.GetProperty("Credentials");
                pRptServiceCredentials.SetValue(objRptService, System.Net.CredentialCache.DefaultCredentials, 
    null);

                
    //获取CredentialRetrievalEnum的值,用来存储数据源的密码是否保存
                Type TCredentialRetEnum = asm.GetType("CredentialRetrievalEnum");
                
    //对数据源的定义并且发布到服务器.
                Type TDSDefinition = asm.GetType("DataSourceDefinition");
                
    object objDSDefinition = Activator.CreateInstance(TDSDefinition);
                PropertyInfo pCredentialRetrieval 
    = TDSDefinition.GetProperty("CredentialRetrieval");
                pCredentialRetrieval.SetValue(objDSDefinition, Enum.Parse(TCredentialRetEnum, "Store", false)
    null);
                SetProperty(objDSDefinition, sConnect, 
    "数据库连接信息", TDSDefinition);
                SetProperty(objDSDefinition, 
    true"Enabled", TDSDefinition);
                SetProperty(objDSDefinition, 
    true"EnabledSpecified", TDSDefinition);
                SetProperty(objDSDefinition, 
    "SQL""Extension", TDSDefinition);
                SetProperty(objDSDefinition, 
    true"ImpersonateUserSpecified", TDSDefinition);
                SetProperty(objDSDefinition, 
    "数据库登陆名""UserName", TDSDefinition);
                SetProperty(objDSDefinition, 
    "数据库登陆密码""Password", TDSDefinition);
                SetProperty(objDSDefinition, 
    false"WindowsCredentials", TDSDefinition);
                MethodInfo MCreateDS 
    = TRptService.GetMethod("CreateDataSource");
                object[] Paramers = new object[] { "报表数据库连接信息", "报表存放目录"true, objDSDefinition, null };
                MCreateDS.Invoke(objRptService, Paramers);
                
    //发布报表文件.
                MethodInfo MCreateRPT = TRptService.GetMethod("CreateReport");
                
    object[] ParamersRPT = new object[] { "报表文件名字""报表存放目录"true"报表文件"null };
                MCreateRPT.Invoke(objRptService, ParamersRPT);
            }


            
    private void SetProperty(object obj, object objValue, string sPropertyName, Type t)
            
    {
                PropertyInfo p 
    = t.GetProperty(sPropertyName);
                p.SetValue(obj, objValue, 
    null);
            }

  • 相关阅读:
    小条打印机输出简析
    Visual Studio离线安装
    删除“Open in Windows Terminal”右键菜单
    《新媒体营销精华:精准定位+爆款打造+匠心运营+内容变现》笔者的新书,欢迎各位粉丝上京东购买
    vue3.0 的 Composition API 的一种使用方法
    对比传统的Xilinx AMP方案和OPENAMP方案-xapp1078和ug1186【转】
    OpenAMP简介【转】
    git 用法【笔记】
    针对非对称多处理系统实现更简单的软件开发【转】
    内核探测工具systemtap简介【转】
  • 原文地址:https://www.cnblogs.com/oldhorse/p/1047094.html
Copyright © 2020-2023  润新知