2024年5月25日发(作者:)

1. 创建U9 SV

1.1 按照BP开发的方式,开发SV

可参考《课程讲解资料V3.5》的BP开发步骤。

1.2 假定业务逻辑案例

SV调用采购订单操作BP,PoShipLineBP,;

传入ID(长整型)、ActionType(整型,0提交,1审核,2弃审);

返回布尔值。

1.3 主要步骤

新建服务项目>>删除默认服务组件>>改配件名>>增加服务组件(可按单据分类)>>改命名空间>>按需增加服务。

构造>>复制DLL>>升级脚本>>发布。

1.4 部署SVC

在生成的SV代码目录内,BpImplement中,有相应的.svc文件,如:EXSVBpImplement

把.svc文件复制到PortalServices下

修改文件,在最尾端追加Services节点,如下:

……

behaviorConfiguration="U9SrvTypeBehaviors">

说明:蓝色字体之间的内容为追加的节点;其中,

service name为.svc文件名的修改,ionSVStub,前缀与.svc文件名一

样,后面粗体字的改为:前面去掉I,后面加Stub;

U9SrvTypeBehaviors为固定值;

endpoint contract为.svc文件名:tionSV;

basicHttpBinding为固定值。

2015-06-22 add by peter 可新建.config文件进行部署(便于出补丁)

在PortalServices下新建config文件,如:(文件名可以svc文

件名命名)

内容参考如下:

behaviorConfiguration="U9SrvTypeBehaviors">

(U9V2.8中经验证过,Config文件内的注释不支持中文)

浏览器中测试服务,效果如下:(与标准产品的有所不同,但验证过能用)

1.5 测试服务是否正常工作

vml-win2008r2/U9/Services/

1.6 业务逻辑代码参考

//引用,

//引用

public override object Do(object obj)

{

OperationSV bpObj = (OperationSV)obj;

//校验

if ( <= 0) { return false; }

try

{

//调用PM操作(提交、审核、弃审)BP

PoShipLineBPProxy p1 = new

PoShipLineBPProxy();

//操作类型

switch (Type)

{

case 0:

Type = (int)ingAct;

break;

case 1:

Type = (int)edAct;

break;

case 2:

Type = (int)t;

break;

default:

return false;

}

//采购订单计划行ID(提交、审核、弃审,传入一计划行ID即为整单操作)select * from PM_POShipLine

LineKey = ;

();

}

catch (Exception ex1)

{ throw new Exception(e); }

return true;

}

编译并复制更新SV DLL

1.7 使用API测试工具,测试该SV是否生效。

使用API测试工具,出现的情况说明:

1、 v2.5金盘,报Support_CultureNameList为空的错;升级补丁后,则报:

[ERROR][ionSVStub]-ion: 当前环境下默认语种为空;目前未解决。

(始终保持不升级补丁)解决,反编译,直接修改源代码,加传入参数:

Value(6, "DefaultCultureName", "zh-CN");

Value(7, "Support_CultureNameList", "zh-CN");

修改后的工具如下:

API-TEST(m).rar

遗留问题:

提交、审核操作成功,弃审报行已打开、挂起或终止,不能再打开的错,暂未去研究。

2、在v2.8下测试,则调用正常。

V2.5(培训版)升级后无Lincense的问解决:

1、 升级前,先备份(培训版Base dll):;

a) 同时备份:35(注意看是否为适合vs2005调试模式而改名了),,以备用;

2、 升级后,也备份(权限版Base dll):;

a) 同时备份:40,,以备用;

3、 停止UFSysManageService_2.1服务,使用培训版Base dll覆盖权限版Base dll;

4、 重新启动UFSysManageService_2.1服务,重启iis,即可继续使用U9。

升级后可能出现的错误:

1、未能从程序集中加载类型dule。

解决:

检查Internet信息服务管理器中,应用程序池U9 AppPool CLR4,

.net framework版本若为v2.0,则portal下需覆盖还原为升级前备份的那个;

.net framework版本若为v4.0,则portal下需覆盖还原为升级后的40。

如果仍未解决,则进入此目录c:meworkv4.0.30319>,管理员用户在cmd命令中运行

aspnet_ -i –enable,表示安装.net framework 4.0。

2. Session

2.1 Session的概念

在现在UBF中,Session的本意是work unit,即持久层的一个边界,非常轻,主要用作批量提交,并标识这次批量提交的

边界,不涉及到事务等概念。

当前ISession可以通过Session的Current属性获得,每调用一次Session的Open方法,Current属性都会被更新。

2.2 Session的使用

using(ISession session = ()){

...

(); //提交更改,但只是Session范围内的修改更新

}

2.3 Session嵌套

当发生session嵌套的情况时,每次提交都是真正提交

示例:

using(ISession session1 = ()){

...

using(ISession session2 = ()){

...

(); //提交更改,但只是Session2范围内的修改更新

}

(); //提交更改,只处理Session1的修改更新

}

2.4 实体新建

新建实体实体的操作分为主实体的新建和非主实体的新建,如果是主实体新建,用不带参数的Create方法,如果是非

主实体的,用带上级实例参数的Create方法。

举例:

using (ISession session = ())

{

A_Com1c1 objA = A_();

_A_Com1c1 = 1000;

_A_Com1c1 = "objA“;

B_Com1c1 objB = B_(objA);//B为A的子实体

_B_Com1c1 = 1001;

_B_Com1c1 = “objB”;

();

}

2.5 实体更新

using(ISession session = ()){

Customer obj = ID(id);

if(obj!=null)

= "new name";

(obj);

... ...

();

}

2.6 实体删除

对于组合关系,如果删除主实体,那么,主实体下面的所有子实体,孙实体会被级联删除, 对于非主实体的删除,可以

用子集合的RemoveAt和Remove(entity)方法,这2个方法等价,例如

using (ISession session = ())

{

A_Com1cN objA = A_ID(aID);

objA.B_At(0);

//或用下面的方式:

B_Com1cN b = ID(bID);

objA.B_(b);

();

}

3. 实体查询方式

3.1 实体的查询类Finder

返回强类型的对象

常用方法:Find,FindByID,FindAll

举例

OqlParamList pList = new OqlParamList();

string strOql = “Code=@Code";

(new OqlParam(“Code”, “11”));

List list=l(strOql, y());

3.2 EntityDataQuery

EntityDataQuery 主要用于希望返回结果是IDataReader,DataSet,单值的情况

创建方式:

1、通过Entity对象:

EntityDataQuery q = DataQuery();

2、通过EntityFullName:

EntityDataQuery q = new EntityDataQuery("er");

EntityDataQuery q = new EntityDataQuery(_FullName);

返回DataSet:FindDataSet

1、全OQL方式

DataSet ds =

taSet(“select ID,Name,Code from UFIDA::U9::CBO::SCM::Customer::Customer");

2、条件OQL方式

DataSet ds = taSet( "ID>1");

返回IDataReader :FindDataReader

1、全OQL方式

IDataReader dr = taReader ("select ID,Name,Code from UFIDA::U9::CBO::SCM::Customer::Customer");

2、条件OQL方式

IDataReader dr = taReader ( "ID>1");

返回单值:

lue("select Max(ID) where id > 111");

分页查询:

DataSet ds = taSetByPage(1, 2, " ID > @ID and Name = @mmm order by ID");

3.3 EntityQuery

主要用于希望返回的结果是实体(弱类型)

以强类型的方式使用,其对外接口和功能与EntityQuery类似,只是返回强类型的对象,

EntityQuery返回弱类型的对象。

创建方式:

1、通过Entity对象:

EntityQuery eq = Query();

2、通过EntityFullName:

EntityQuery q = new EntityQuery("er");

EntityQuery q = new EntityQuery(_FullName);

返回实体:FindByID和Find

FindByID ,先从缓存加载对象,如果缓存没有,则从数据库加载对象;

Customer a = ID();

Customer a = (Customer)ID();

Find方式,直接从数据库加载, 然后查缓存,如果缓存有,用缓存对象替换;

(“ID = @ID”);

("ID = @ID”);

返回实体集合

条件OQL方式:

q = new EntityQuery(_FullName);

l(“ID >1 ");

3.4 EntityViewQuery

报表中用。

4. 第三方程序(DotNet平台)以Web方式调用U9 SV

4.1 找到所需的服务

查询集团文档或利用SQL语句结合查询,如:

select

yName As [类显示名 ]

,a. FullName as [ 类全名]

,c. AssemblyName as [ 程序集名]

,c. Kind as [ 组件类型]

,d. DisplayName as [ 组件显示名 ]

from UBF_MD_Class as a

left join UBF_MD_Class_Trl as b on a. Local_ID=b .Local_ID

left join UBF_MD_Component as c on a. MD_Component_ID=c .ID

left join UBF_MD_Component_Trl as d on c. Local_ID=d .Local_ID

where (1 =1)

and ( c. Kind='SV' )

and B. DisplayName like '%创建%物料%'

(U9的服务均在PortalServices内)

4.2 测试服务是否可用

以创建物料(料品)的服务为例,IE地址栏中输入(第一次加载比较慢):

vml-win2008r2/u9/services/

4.2.1 可能的出错情况

服务不可用时,可能会出现的情况:

1、提示:配置错误 无法读取配置文件,因为它超过了最大文件大小

解决:

<<>>

修改注册表

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftInetStpConfiguration]

"MaxWebConfigFileSizeInKB"=dword:00000000

(可把以上内容,粘贴到txt文件中,注意靠左,然后修改txt文件为reg文件,双击reg文件进行注册即可)

注册后需重启iis。

如仍出现这个问题:

运行->inetmgr->应用程序池->DefaultAppPool->设置应用程序池默认设置->启用32位应用程序->False;

2、之后,还有可能出现MIME映射问题;

提示:由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加

MIME 映射

解决:

执行:meworkv3.0Windows Communication -I

(建议在命令窗口内执行)

作用:安装此版本的Windows Communication Foundation ......

4.3 生成代理类

Svcutil vml-win2008r2/u9/services/ /ser:DataContractSerializer

生成一个.cs文件,一个.config文件。

4.4 .NET架构项目

1. 用VS新建项目,

2. 把代理类和配置文件加到项目中

3. 修改名称为

4. 添加和引用

(如果一个项目中需要用到调用多个服务,则需要合并代理类和配置文件,请参考合并代理类说明文档,未测试)

4.5 尝试编译

“ExceptionDetail”方法没有采用“0”个参数的重载

在报错的相应位置的类里面添加

public ServiceExceptionDetail(Exception exception) : base(exception) { }

4.6 项目实现细节

4.6.1 调用服务框架代码

private void button1_Click(object sender, EventArgs e)

{

d = false;

//实例化代理类

UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient client;

client = new UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient();

//返回异常信息,目前还没有使用此属性

eBase[] returnMsg;

//上下文信息

object context;

9CBOPubControllerContextDTOData contextdto1 = new

UFIDAU9CBOPubControllerContextDTOData();

//该服务的返回结果

9CBOSCMItemItemMasterData[] returnItems;

//该服务的传入参数

UFIDAU9ISVItemItemMasterDTOData[] itemMasterDtos;

try

{

//给上下文信息赋值

context = CreateContextObj();

contextdto1 = CreateContextDto();

//给传入参数赋值

itemMasterDtos = SetItemMasterDtos();

//服务调用(经验证,v2.5第二个参数context可传null),add by peter 2015-05-25 Context

可传入其中一个即可(杂发单中验证通过),context or contextdto1

returnItems = (out returnMsg, context, itemMasterDtos, contextdto1);

("一个料品生成成功!");

}

catch (Exception ex)

{

//异常信息捕获

throw new Exception(GetExceptionMessage(ex));

}

finally

{ d = true; }

}

4.6.2 上下文信息

// 给上下文信息赋值

private static Context CreateContextObj()

{

// 实例化应用上下文对象

Context thContext = new ThreadContext();

nary ns = new Dictionary

object>();

//组织,select ,, from Base_Organization a left join Base_Organization_Trl

b on = and lag='zh-cn'

("OrgID", "1035");

//用户,select ,, from Base_User a left join Base_UserOrg b on

=b.[User] where =1035

("UserID", "1241");

//add by peter 2015-07-20 发现问题:采购订单审核时,审核人始终默认admin(但审核人字段

存放的应是Name),后来将UserName传入后正常,所以将UserID,UserCode,UserName全信息传入,则有保障。

("UserCode", "admin");

("UserName", "管理员");

//语言,select Code from Base_Language

("CultureName", "zh-CN");

//add by peter 2015-05-25 增加这一句,否则可报:当前环境下默认语种为空

("DefaultCultureName", "zh-CN");

//企业,管理控制台中取

("EnterpriseID", "001");

lueHas = ns;

return thContext;

}

private static UFIDAU9CBOPubControllerContextDTOData CreateContextDto()

{

// 实例化应用上下文对象

UFIDAU9CBOPubControllerContextDTOData dto1 = new

UFIDAU9CBOPubControllerContextDTOData();

dto1.m_orgCode = "010";

//dto1.m_userID = 1241;

dto1.m_userCode = "01";

//dto1.m_cultureName = "zh_CN";

dto1.m_entCode = "001";

return dto1;

}

4.6.3 为关联实体属性赋值

//为关联实体属性赋值,赋ID或Code,返回CommonArchiveDataDTOData

public static UFIDAU9CBOPubControllerCommonArchiveDataDTOData SetCommonArchiveDTO(long

entityID)

{ return SetCommonArchiveDTO(entityID, ); }

public static UFIDAU9CBOPubControllerCommonArchiveDataDTOData SetCommonArchiveDTO(string

entityCode)

{ return SetCommonArchiveDTO(-1, entityCode); }

public static UFIDAU9CBOPubControllerCommonArchiveDataDTOData SetCommonArchiveDTO(long

entityID, string entityCode)

{

UFIDAU9CBOPubControllerCommonArchiveDataDTOData dto = new

UFIDAU9CBOPubControllerCommonArchiveDataDTOData();

if (entityID <= 0 && OrEmpty(entityCode))

return null;

dto.m_code = entityCode;

dto.m_iD = entityID;

return dto;

}

4.6.4 给传入参数赋值

//给传入参数赋值

private static UFIDAU9ISVItemItemMasterDTOData[] SetItemMasterDtos()

{

List dtos = new

List();

//创建一个料品

UFIDAU9ISVItemItemMasterDTOData dto = new UFIDAU9ISVItemItemMasterDTOData();

//为料品dto赋值

dto.m_code = "WebServices01";

dto.m_name = "WebservicesCreate测试";

// 状态码(关联实体类型赋值)

//dto.m_status = SetCommonArchiveDTO("3200");

// 库存主单位

dto.m_inventoryUOM = SetCommonArchiveDTO("01");

dto.m_inventoryUOMGroup = 0;

//料品形态属性(9采购件)

dto.m_itemFormAttribute = 9;

//料品库存相关信息

UFIDAU9ISVItemItemInvInfoDTOData inventoryinfo1 = new

UFIDAU9ISVItemItemInvInfoDTOData();

//库存规划方法(4MRP规划)

inventoryinfo1.m_inventoryPlanningMethod = 4;

//规划时机

inventoryinfo1.m_inventoryPlanTime = -1;

//采购控制方法(1最高存量限制)

inventoryinfo1.m_purchaseControlMode = 1;

//周转率(采购控制方法为(料品周转率)时,周转率需大于)

//inventoryinfo1.m_turnOverRate = 1;

//预留方式

inventoryinfo1.m_reserveMode = -1;

//补货方法

inventoryinfo1.m_supplyMethod = -1;

dto.m_inventoryInfo = inventoryinfo1;

//标准成分

dto.m_standardPotency = -1;

dto.m_startPotency = -1;

dto.m_endPotency = -1;

//标准等级

dto.m_standardGrade = -1;

dto.m_startGrade = -1;

dto.m_endGrade = -1;

//料品形态

dto.m_itemForm = -1;

//描述性弹性域(按需赋值)

UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData descFlexSegs = new

UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData();

descFlexSegs.m_privateDescSeg1 = "111";

dto.m_descFlexField = descFlexSegs;

//把料品dto添加到集合中

(dto);

return y();

}

4.6.5 提取服务返回的异常信息

(如果还有异常提取有问题,请开发人员跟踪检查异常信息结构,再修改下面的方法)

//提取异常信息

private static string GetExceptionMessage(Exception ex)

{

string faultMessage = "未知错误,请查看ERP日志!";

tException timeoutEx = ex as tException;

if (timeoutEx != null)

{

faultMessage = "因第一次访问ERP服务,访问超时,如避免此错误,请先启动ERP系统!";

}

else

{

xception faultEx =

ex as FaultException;

if (faultEx == null)

{

faultMessage = e;

}

else

{

ServiceException serviceEx = ;

if (serviceEx != null && !OrEmpty(e)

&& !("fault", lIgnoreCase))

{

// 错误信息在e中,请提取,

// 格式为"Fault:料品不能为空,请录入n 在....."

int startIndex = f(":");

int endIndex = f("n");

if (endIndex == -1)

endIndex = ;

if (endIndex > 0 && endIndex > startIndex + 1)

{

faultMessage = ing(startIndex + 1, endIndex -

startIndex - 1);

}

else

{

faultMessage = e;

}

}

}

}

return faultMessage;

}

4.7 属性说明

receiveTimeout:调用服务时超时时间

maxReceivedMessageSize:传入的参数大小

address:调用的服务地址

bindingConfiguration:绑定的配置名称

closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00"

sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false"

hostNameComparisonMode="StrongWildcard" maxBufferSize="65536"

maxBufferPoolSize="524288" maxReceivedMessageSize="65536"

messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"

useDefaultWebProxy="true">

maxBytesPerRead="4096" maxNameTableCharCount="16384" />

realm="" />

binding="basicHttpBinding"

bindingConfiguration="BasicHttpBinding_CreateItemByDTOSRV"

contract="UFIDAU9ISVItemIBatchCreateItemByDTOSRV"

name="BasicHttpBinding_CreateItemByDTOSRV" />

4.8 常见异常信息

4.8.1 枚举类型默认值错误

如果枚举类型未赋值,应该赋为-1,但目前默认赋为0(这一点与直接调SV DLL不同,需注意),对于这种类型的需要

手工赋为-1

1. 可能引起的错误:“实体 料品 的引用对象 标准成分 不存在”

解决方式:料品.标准成分 = -1;

2. 未出现错误,但是所赋默认值错误。(portal中保存一条记录,对比和服务导入的记录的差别确定应该为枚举类型

赋什么默认值)

解决方式:赋值为相应的值

4.8.2 业务完整性异常

请了解该业务后检查传入的参数是否正确,做相应修改

比如:“料号已存在,请重新输入”, 编码重复异常

“料品库存相关信息的属性 库存上限 不允许为零”,规划方法为 最高最低点法时,库存上限需要有一个值

4.8.3 已超过传入消息(65536)的最大消息大小配额

错误信息:已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的

MaxReceivedMessageSize 属性

解决方法:修改配置文件中的MaxReceivedMessageSize和maxBufferSize的字节大小,把数值增大

d) IIS7提示无法读取配置文件,因为它的大小超过了最大设置

HKLMSOFTWAREMicrosoftInetStpConfigurationMaxWebConfigFileSizeInKB的值.

如果没有,创建一个 Configuration项,添加一个DWORD值 MaxWebConfigFileSizeInKB

重启IIS

4.8.4 “ExceptionDetail”方法没有采用“0”个参数的重载

在报错的相应位置(的类里面)添加

public ServiceExceptionDetail(Exception exception) : base(exception) { }

4.8.5 MessageBase找不到命名空间

命名空间“ions”中不存在类型或命名空间名称“MessageBase”(是缺少程序集引用吗?)

修改原则为: ions1修改为ions

ions修改为ions1

只修改报错的位置

5. 一些后台查询语句

5.1 查实体属性(表字段)

select a. Name as ComponentName ,at. DisplayName as ComponentName_CN,a. AssemblyName,a .Kind

,b. Name as ClassName , bt. DisplayName as ClassName_CN,b. FullName,b .Discriminator

,c. Name as AttributeName ,ct. DisplayName as AttributeName_CN

from UBF_MD_Component a

left outer join UBF_MD_Component_Trl at on a. Local_ID=at .Local_ID and lag= 'zh-cn'

left outer join UBF_MD_Class b on a. ID=b .MD_Component_ID

left outer join UBF_MD_Class_Trl bt on b. Local_ID=bt .Local_ID and lag= 'zh-cn'

left outer join UBF_MD_Attribute c on b. ID=c .MD_Class_ID

left outer join UBF_MD_Attribute_Trl ct on c. Local_ID=ct .Local_ID and lag= 'zh-cn'

where (1 =1)

and bt. DisplayName ='料品'

and yName like '%采购控制方法%'

5.2 查枚举值

SELECT a. Code , at .NAME , a. EValue , c. UID AS EnumTypeUID ,ct .Name,

FROM UBF_Sys_ExtEnumValue a

LEFT OUTER JOIN UBF_Sys_ExtEnumValue_Trl at ON a. id =at . id AND at. SysMLFlag='zh-cn'

LEFT OUTER JOIN UBF_Sys_ExtEnumType c ON a. ExtEnumType =c . id

left outer join UBF_Sys_ExtEnumType_Trl ct on c. ID=ct .ID and lag= 'zh-cn'

WHERE (1 =1)

and ct. Name='料品形态属性'

5.3 查BP、SV

select

yName As [类显示名]

,a. FullName as [ 类全名]

,c. AssemblyName as [ 程序集名]

,c. Kind as [ 组件类型]

,d. DisplayName as [ 组件显示名]

from UBF_MD_Class as a

left join UBF_MD_Class_Trl as b on a. Local_ID=b .Local_ID

left join UBF_MD_Component as c on a. MD_Component_ID=c .ID

left join UBF_MD_Component_Trl as d on c. Local_ID=d .Local_ID

where (1 =1)

and ( c. Kind='SV' or ='BP' )

and B. DisplayName like '采购%操作%'

6. 合并代理类及配置文件

6.1 示例说明

创建料品服务与删除料品服务共同放在同一个项目中。

使用svcutil生成删除料品服务的代理类

Svcutil vml-win2008r2/u9/services/ /ser:DataContractSerializer

6.2 代理类区域划分

如图:

6.3 合并代理类的步骤

(以创建料品与删除料品两个服务的代理类合并为示例):

1、用svcutil生成代理类后,先备份一份,用于复制备用;

2、将第1个代理类(如)A区复制出来放在公共类(如)中;

3、将第1个代理类(如)B区剪切出来,放在公共类(如)中;

3、将第2个代理类(如)B区删除,只保留:

namespace Data

{

using ization;

public partial class UFIDAU9ISVItemDeleteItemMasterDTOData…{…}

}

(UFIDAU9ISVItemDeleteItemMasterDTOData为删除料品专用DTO)

4、编译后,发现还需保留:UFIDAU9ISVItemItemSrvReturnDTOData(删除物料返回专用DTO),

错误 3 命名空间“Data”中不存在类型或命名空间名称

“UFIDAU9ISVItemItemSrvReturnDTOData”(是缺少程序集引用吗?)

如图:

(2015-05-25 add by peter,需要多次编译,以排除缺漏的错误)

5、在项目中排除文件(后面用代码实现动态获取Binding&EndpointAddress,不需合并配置文件)。

6.4 合并代理类的原理

提取相同的部份放在公共类,保留特有的部份在自身代理类中。

6.5 代码实现示例

(代码实现动态获取Binding&EndpointAddress,则不需合并配置文件)

修改创建料品的代码,button1_Click

//所需的Binding

g b =

CreateBinding("BasicHttpBinding_CreateItemByDTOSRV");

//所需的EndpointAddress

ntAddress a =

CreateEndpointAddress("vml-win2008r2/U9/services/");

//实例化代理类

UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient client;

client = new UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient(b, a);

删除料品的代码

private void button2_Click(object sender, EventArgs e)

{

d = false;

//所需的Binding

g b =

CreateBinding("BasicHttpBinding_DeleteItemByDTOSRV");

//所需的EndpointAddress

ntAddress a =

CreateEndpointAddress("vml-win2008r2/u9/services/");

//实例化代理类

UFIDAU9ISVItemIBatchDeleteItemByDTOSRVClient client;

client = new UFIDAU9ISVItemIBatchDeleteItemByDTOSRVClient(b, a);

//返回异常信息,目前还没有使用此属性

eBase[] returnMsg;

//上下文信息

object context;

9CBOPubControllerContextDTOData contextdto1 = new

UFIDAU9CBOPubControllerContextDTOData();

//该服务的返回结果

9ISVItemItemSrvReturnDTOData[] returndto1;

//该服务的传入参数

UFIDAU9ISVItemDeleteItemMasterDTOData[] itemMasterDtos;

try

{

//给上下文信息赋值

context = CreateContextObj();

contextdto1 = CreateContextDto();

//给传入参数赋值

itemMasterDtos = GetDeleteItemMasterDtos();

//服务调用

returndto1 = (out returnMsg, context, itemMasterDtos, contextdto1);

("一个料品删除成功!");

}

catch (Exception ex)

{

//异常信息捕获

throw new Exception(GetExceptionMessage(ex));

}

finally

{ d = true; }

}

创建Binding

private static Binding binding = null;

//创建Binding

public static g CreateBinding(string name)

{

if (binding != null) return binding;

if (OrEmpty(name)) throw new Exception("调用WebService时,传入的binding 名不能为空!");

binding = new Binding();

(new ssageEncodingBindingElement

(11, 8));

ansportBindingElement bindingA =

new ansportBindingElement();

//10485760

eivedMessageSize = ue;

(bindingA);

imeout = new TimeSpan(0, 3, 0);

meout = new TimeSpan(0, 3, 0);

eTimeout = new TimeSpan(0, 3, 0);

//设定超时时间

meout = new TimeSpan(0, 30, 0);

return binding;

}

创建EndpointAddress

//创建EndpointAddress

public static ntAddress CreateEndpointAddress(string svcFullAddress)

{

//校验

if (OrEmpty(svcFullAddress)) return null;

//实例化

ntAddress a = new ntAddress(svcFullAddress);

return a;

}

删除料品,传入参数值

//Delete料品,给传入参数赋值

private static UFIDAU9ISVItemDeleteItemMasterDTOData[] GetDeleteItemMasterDtos()

{

List dtos = new List();

UFIDAU9ISVItemDeleteItemMasterDTOData dto = new UFIDAU9ISVItemDeleteItemMasterDTOData();

dto.m_code = "WebServices01";

(dto);

return y();

}