快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰黑平台:使用WCF实现SOA面向服务编程(三)—— 使用AJAX+WCF实现页面开发



在上一篇讲到,假如将BLL层的每一个类都转化为*.svc,这是一个不其实的设法主见。它会使办事项更繁杂,难于治理。

这时刻,我们第一光阴想到的是23个简单开拓模式中的Factory,在这里,Factory恰恰派上用处。我们把这个Factory称之为管道(pipeline) ,经由过程这个管道客户端可以随意调用办事器BLL层里面的类。

(关于管道的观点,建议参考Cory Isaacson的佳构《多核利用架构关键技巧—软件管道与soa》)

当你应用B/S要领开拓UI层时,只要懂得此开拓模式,应用Ajax加上WCF里面的WebHttpBinding绑定和WebHttpBehavior行径,可以说是天衣无缝的澳门新葡亰黑平台组合。

首先,开拓一个数据左券,此中包括法度榜样集名称,类名,构造函数的参数,措施名,措施中的参数

[DataContract]

public class Communication

{

[DataMember]

public string Assembly

{

get;

set;

}

[DataMember]

public string Class

{

get;

set;

}

[DataMember]

public object[] ConstructedParameters

{

get;

set;

}

[DataMember]

public st澳门新葡亰黑平台ring Method

{

get;

set;

}

[DataMember]

public object[] Parameters

{

get;

set;

}

}

为了证实客户端可以经由过程Ajax能够直接调用办事器WCF,我们先在MyAssembly法度榜样集里面开拓一个User类,然后天生MyAssembly.dll法度榜样集作为测试。

namespace MyAssembly

{

[DataContract]

public class User

{

[DataMember]

public int ID

{ get; set; }

[DataMember]

public string Name

{ get; set; }

[DataMember]

public int Age

{ get; set; }

}

public class UserManager

{

public List GetList()

{

List entities = new List();

User user = new User();

user.ID =澳门新葡亰黑平台 0;

user.Age = 26;

user.Name = "Leslie";

entities.Add(user);

return entities;

}

}

}

好,现在已经做好筹备,现在我们新建一个“启动了AJAX的WCF办事”

[ServiceContract(Namespace = "myNamespace")]

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

//留意必须将RequirementsMode设置为AspNetCompatibilityRequirementsMode.Allowed

public class Service

{

private static Hashtable assemblies = new Hashtable();

private static Hashtable types = new Hashtable();

[OperationContract]

[WebGet]

// 要应用 HTTP GET,请添加 [WebGet] 特点。

public string DoWork(Communication communication)

{

Type classType = GetType(communication);

if (classType != null)

{

object reflectedObject;

if (communication.ConstructedParameters != null)

reflectedObject = Activator.CreateInstance(classType, communication.ConstructedParameters);

else

reflectedObject = Activator.CreateInstance(classType);

MethodInfo methodInfo = classType.GetMethod(communication.Method);

if (methodInfo != null)

{

object data = methodInfo.Invoke(reflectedObject, communication.Parameters);

if (data != null)

return Formate(data, methodInfo.ReturnType);

else

return null;

}

else

return null;

}

return null;

}

//由于结果供于Ajax页面应用,以是将结果转化为Json形式

//着实本项目已经是启动了AJAX,以是在默认环境下结果会澳门新葡亰黑平台自己转化为JSON,但由于不能事先实现返回的类型,以是

//此处手动将结果转换成JSON字符串

public string Formate(object data,Type type)

{

using (Stream stream = new MemoryStream())

{

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(type);

jsonSerializer.WriteObject(stream, data);

byte[] byteData = new byte[stream.Length];

stream.Seek(0,0);

stream.Read(byteData, 0, (int)stream.Length);

stream.Close();

return Encoding.UTF8.GetString(byteData);

}

}

//加载法度榜样集

private Assembly GetAssembly(Communication communication)

{

if (!assemblies.ContainsKey(communication.Assembly))

{

Assembly myAssembly = Assembly.Load(communication.Assembly);

assemblies.Add(communication.Assembly, myAssembly);

}

return (Assembly)assemblies[communication.Assembly];

}

//加载类

private Type GetType(Communication communication)

{

if (!types.ContainsKey(communication.Class))

{

Assembly assembly=GetAssembly(communication);

types.Add(communication.Class, assembly.GetType(communication.Class));

}

return (Type)types[communication.Class];

}

}

办事器端会自动为你设置设置设备摆设摆设.config文件

//留意启动enableWebScript

//留意此处启动了httpGetEnabled

webHttpBinding " contract="Service" />//留意绑定的是webHttpBinding

好吧,现在万事俱备的时刻,让我们开拓一个测试页面

测试成功:

恭喜你终于学会若何应用Ajax+WCF进行页面数据显示了。

你应该初步懂得到若何应用管道Pipeline进行客户端与办事器真个通讯,自此之后,每逢你进行简澳门新葡亰黑平台单的网站开拓时都可应用此要领。好处在于页面无需懂得数据是从何处获取的,数据存储的Web办事跟网站可以处于不合的办事器或者不合的IIS利用法度榜样池,以是这样做可以把办事器压力降到最低。同时你可以应用异步的办事,来进一步前进数据站点的线程池效率。(异步办事可参考ASP.NET办事器端多线程设计 )

即就是这样,此开拓要领只得当用于通俗的页面开拓,还不算是完善,由于SOA是面向多方面的。试想一下假如系统调用的是公司的内部治理系统的办事,此中一定会夹杂着繁杂的事情流,其处置惩罚要领与返回结果也有不合,整个应用JSON作为返回值也会造成不需要的机能损耗,这时刻应该怎么抉择呢?

下面就为大年夜家开始解说一下应用Web办事与WF结合开拓以发挥其强大年夜功能。

您可能还会对下面的文章感兴趣: