zoukankan      html  css  js  c++  java
  • 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);
            }

  • 相关阅读:
    SQL2000中创建作业(定时查询,更新)(转)
    Windows下如何安装MongoDB
    开发高性能的MongoDB应用—浅谈MongoDB性能优化(转)
    大数据时代的数据存储,非关系型数据库MongoDB(一)(转)
    Memcached在Windows下的配置和使用(转)
    mysql中去重 distinct 用法
    k8s install
    3.Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件
    2.LXC和namespace介绍
    python类中两个列表实例如何相加或相减
  • 原文地址:https://www.cnblogs.com/oldhorse/p/1047094.html
Copyright © 2011-2022 走看看