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,
null
,
null
);
//
添加 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
);
}
查看全文
相关阅读:
2012-2013年度大总结
[每日一题] 11gOCP 1z0-052 :2013-08-31 数据库的存储结构....................................................A8
Oracle约束操作
几道字典树题目
1032
uva 10718 Bit Mask(贪心)
找工作笔试面试那些事儿(2)---内存管理那些事
汉语-词语:结构
汉语-词语:形式
汉语-词语:方向
原文地址:https://www.cnblogs.com/oldhorse/p/1047094.html
最新文章
「新手向」koa2从起步到填坑
一步一步使用webpack+react+scss脚手架重构项目
ReactJs入门
我经历的前端开发模式进化史
webpack入门(四)——webpack loader 和plugin
JSONP原理及实现跨域方式
Node中没搞明白require和import,你会被坑的很惨
怎样彻底清除UniAccess Agent
解决农产品滞销难题,农村淘宝有何绝招?
WebGL 启动载入触发更新流程分析
热门文章
Appium Android Bootstrap源代码分析之简单介绍
求职面试
斯坦福《机器学习》Lesson4感想--1、Logistic回归中的牛顿方法
java起源和基本数据类型
POJ 1273 Drainage Ditches
块设备驱动之NOR FLASH驱动
C语言之基本算法33—矩阵的基本运算
用apache的httpclient发请求和接受数据
poj 3140 Contestants Division(树形dp? dfs计数+枚举)
Codeforces Round #198 (Div. 2) D. Bubble Sort Graph (转化为最长非降子序列)
Copyright © 2011-2022 走看看