当前位置: 首页 > news >正文

三明市网站建设_网站建设公司_腾讯云_seo优化

建站网站关键词优化,公司起名免费网,宁波seo优化费用,建设方案1. 有关生存期的补充正常情况下#xff0c;每次调用 WebMethod#xff0c;服务器都会创建一个新的 WebService 对象#xff0c;即便客户端使用同一个代理对象多次调用 WebMethod。而我们一旦调用了有缓存标记的 WebMethod#xff0c;只要未超出缓存期#xff0c;WebServic…1. 有关生存期的补充正常情况下每次调用 WebMethod服务器都会创建一个新的 WebService 对象即便客户端使用同一个代理对象多次调用 WebMethod。而我们一旦调用了有缓存标记的 WebMethod只要未超出缓存期WebService 对象都不会被重新创建。在缓存期内调用没有缓存标记的 WebMethod也会继续使用该 WebService 对象。有太多因素让这个缓存机制变得不那么可靠因此我们不能奢望用缓存标记来维持特定的对象状态况且缓存机制的设计初衷也只是为了快速输出那些比较稳定非常大的数据。基于多用户并发调用这个环境WebService 本身最好设计成无状态对象我们可以使用 Session 和 Application 来保持特定的状态信息。2. 异步调用网上很多人在写有关 .net 2.0 的文章时都喜欢用“优雅”这个词。的确在 2.0 中编译器和代码生成器为我们封装了很多罗嗦的东西诸如匿名方法、委托推断等等当然还有这 WebService 的异步调用。我们不用再写那些个 BeginXXX、EndXXX 了基于事件驱动的异步机制会自动为每个 WebMethod 生成一个 XXXAsync 的异步方法和 XXXCompleted 事件我们只需调用该方法并处理该事件即可完成异步操作当真是优雅了不少。不要小看 2.0 的这些封装我们编写的代码越少意味着出错的几率越小。下面的示例中我们使用了匿名方法来处理事件看上去更简洁了些。WebServices.cs [WebService(Namespace http://www.rainsts.net/, Description我的Web服务)][WebServiceBinding(ConformsTo WsiProfiles.BasicProfile1_1)]public class WebService : System.Web.Services.WebService {  [WebMethod]  public string HelloWorld()  {    return Hello World!;  }} Client.cs WebService ws new WebService();ws.HelloWorldCompleted delegate(object sender, HelloWorldCompletedEventArgs e){  Console.WriteLine(e.Result);};ws.HelloWorldAsync(xxx); 3. 缓存WebMethodAttribute.CacheDuration 为 WebService 提供了缓存申明机制。通过添加该标记我们可以缓存输出结果。不过缓存机制会影响 WebService 的生存期(见上)。WebServices.cs [WebService(Namespace http://www.rainsts.net/, Description我的Web服务)][WebServiceBinding(ConformsTo WsiProfiles.BasicProfile1_1)]public class WebService : System.Web.Services.WebService {  [WebMethod(CacheDuration10)]  public DateTime TestCache()  {    return DateTime.Now;  }} Client.cs WebService ws new WebService();for (int i 0; i 20; i){  Console.WriteLine({0}:{1}, i 1, ws.TestCache());  Thread.Sleep(1000);} 4. 保持状态.NET WebService 是建立在 ASP.NET 基础上在 WebService 中我们同样可以访问 Session、User、Application 等上下文对象不过在某些使用细节上可能有所不同。由于 WebService 客户端代理对象可能应用于 ConsoleApplication、WinForm 或 WebForm 等环境而 Session 又必须通过 Cookie 来保存唯一的 SessionID因此我们必须使用 CookieContainer 创建 Cookie 容器来保存 WebService 返回的 Session 信息否则每次调用的 SessionID 都不同自然无法使用 Session 来保存状态了。创建容器对象后必须将其引用赋值给代理对象的 CookieContainer 属性。在第一次调用 SessionEnabled WebMethod 后该容器将持有 Session Cookie 信息。如果需要在多个代理对象中调用 SessionEnabled WebMethod那么它们必须持有同一个 Cookie 容器对象。WebServices.cs [WebService(Namespace http://www.rainsts.net/, Description我的Web服务)][WebServiceBinding(ConformsTo WsiProfiles.BasicProfile1_1)]public class WebService : System.Web.Services.WebService {  [WebMethod(EnableSession true)]  public string TestSession()  {    string s TestSession;    object o Session[s];    int i o ! null ? (int)o : 0;    i;    Session[s] i;    return Session.SessionID.ToString() : i;  }} Client.cs WebService ws new WebService();// 创建Cookie容器保持SessionID。否则每次调用的 SessionID 都不同。CookieContainer cookies new CookieContainer();ws.CookieContainer cookies;for (int i 0; i 10; i){  Console.WriteLine({0}:{1}, i 1, ws.TestSession());} 至于 Application 的使用和 WebForm 中基本没有什么区别。WebServices.cs [WebService(Namespace http://www.rainsts.net/, Description我的Web服务)][WebServiceBinding(ConformsTo WsiProfiles.BasicProfile1_1)]public class WebService : System.Web.Services.WebService {  [WebMethod]  public DateTime TestApplicationState()  {    object o Application[TestApplicationState];    if (o null)    {      o DateTime.Now;      Application[TestApplicationState] o;    }    return (DateTime)o;  }} Client.cs for (int i 0; i 10; i){  WebService ws new WebService();  Console.WriteLine({0}:{1}, i 1, ws.TestApplicationState());  Thread.Sleep(1000);} 5. SoapHeaderSoapHeader 多数情况下用来传递用户身份验证信息当然它的作用远不止如此有待于在实际应用中发掘。SoapHeader 缺省情况下由客户端代理对象发送给 WebService当然我们可以通过 WebMethodAttribute.Direction 来改变传送方向。SoapHeader 使用步骤(1) 创建继承自 System.Web.WebServices.SoapHeader 的自定义 SoapHeader 类型。(2) 在 WebService 中创建拥有 public 访问权限的自定义 SoapHeader 字段。(3) 在需要使用 SoapHeader 的 WebMethod 上添加 SoapHeaderAttribute 访问特性。SoapHeaderAttribute 构造必须指定 memberName 参数就是我们在第二步中申明的字段名称。(4) 生成器会自动为客户端生成同名的自定义 SoapHeader 类型只不过比起我们在 WebService 端创建的要复杂一些。同时还会为代理类型添加一个 soapheaderValue 属性。在下面的演示代码客户端将传递一个自定义 MyHeader 到 WebService。请注意我们尽管在 WebService 中申明了 MyHeader 字段但并没有创建对象实例这是因为客户端传递过来的 XML 中包含了 SoapHeader 信息基础结构会自动解析并创建对象实例然后赋值给 my 字段。至于客户端自然需要创建一个 MyHeader 对象实例并赋值给 WebService.MyHeaderValue 属性。SoapHeaderAttribute.Direction 缺省就是 In下面例子中的 Direction SoapHeaderDirection.In 可以省略。WebServices.cs public class MyHeader : SoapHeader{  public string Username;  public string Password;}[WebService(Namespace http://www.rainsts.net/, Description我的Web服务)][WebServiceBinding(ConformsTo WsiProfiles.BasicProfile1_1)]public class WebService : System.Web.Services.WebService {  public MyHeader my;  [WebMethod]  [SoapHeader(my, Direction SoapHeaderDirection.In)]  public void TestSoapHeadIn()  {    System.Diagnostics.Debug.Write(my.Username);    System.Diagnostics.Debug.Write(my.Password);  }} Client.cs WebService ws new WebService();MyHeader head new MyHeader();head.Username u2;head.Password p2;ws.MyHeadValue head;ws.TestSoapHeadIn(); 我们改写一下将传递方向改为从 WebService 到客户端。自然我们需要调整 Direction SoapHeaderDirection.Out在 WebMethod 中我们还必须创建 MyHeader 实例因为这次我们不会接受到客户端传递的 SoapHeader 了。客户端代理对象调用 WebMethod 后就可以使用 MyHeaderValue 属性访问其内容了。WebServices.cs public class MyHeader : SoapHeader{  public string Username;  public string Password;}[WebService(Namespace http://www.rainsts.net/, Description我的Web服务)][WebServiceBinding(ConformsTo WsiProfiles.BasicProfile1_1)]public class WebService : System.Web.Services.WebService {  public MyHeader my;  [WebMethod]  [SoapHeader(my, Direction SoapHeaderDirection.Out)]  public void TestSoapHeadOut()  {    my new MyHeader();    my.Username u1;    my.Password p1;  }} Client.cs WebService ws new WebService();ws.TestSoapHeadOut();Console.WriteLine(ws.MyHeaderValue.Username);Console.WriteLine(ws.MyHeaderValue.Password); 6. 异常ASP.NET WebService 通过 Fault XML 元素来传递异常信息客户端代理对象会生成一个 SoapException 的异常并使用 Fault XML 信息填充其相关属性诸如 Message 等。另外我们可以对 WebService 进行异常包装除了传递 Exception Message 外还可以传递一些错误状态代码以便客户端用户做进一步处理。WebServices.cs [WebService(Namespace http://www.rainsts.net/, Description我的Web服务)][WebServiceBinding(ConformsTo WsiProfiles.BasicProfile1_1)]public class WebService : System.Web.Services.WebService {  [WebMethod]  public void TestException()  {    try    {      throw new Exception(aaa...);    }    catch (Exception e)    {      throw new SoapException(e.Message, new System.Xml.XmlQualifiedName(ErrorCode01), e);    }  }} Client.cs WebService ws new WebService();try{  ws.TestException();}catch (System.Web.Services.Protocols.SoapException e){  Console.WriteLine(e.Message);  Console.WriteLine(e.Code.Name);} 原文地址http://www.rainsts.net/article.asp?id282转载于:https://www.cnblogs.com/wfwup/archive/2009/12/02/1615186.html
http://www.ihoyoo.com/news/105999.html

相关文章:

  • 创新的品牌网站建设onedrive结合WordPress
  • 开网店需要自己做网站吗嘉兴海盐县城乡建设局网站
  • 什么叫高端网站定制青岛网站建设公司外包
  • 建设银行网站打印账单吐鲁番大型网站建设平台
  • 大型网站seo方案官渡网站建设
  • 怎么做好营销网站开发简单的页面
  • 制作网站的模板免费下载WordPress二级域名插件
  • 简单电商网站模板保定网站建设设计
  • 广州建设厅网站西宁网站seo外包
  • 百度发视频步骤广东seo点击排名软件哪里好
  • 江西专业的网站建设制作制作h5用什么软件比较好
  • 一诺建站产品营销推广策略
  • asp.net网站结构百度只收录网站首页
  • 毕设敦煌壁画网站开发选题背景网店推广
  • 网站建设详细流重养网站建设
  • 上海建筑建材业门户网站青岛做网站价格
  • 可以做外贸的网站有哪些网站建设如何做好整体色彩搭配
  • php网站开发模式有哪些建设厅焊工证
  • 建设工程业绩查询网站wordpress 只有内页能打开
  • 特卖网站设计西安做网站找哪家公司好
  • 与小学生一起做网站购物网站开发将商品导入数据库
  • 网站建设评审会的通知网站建设方案服务公司
  • 用vs2015做网站教程网站建设流程分几步
  • 官方网站开发招标须知化工外贸网站建设
  • 做印刷广告的图片在哪个网站找网站背投广告代码
  • 长春网站制作报价哪个网站做海报好
  • php网站开发概念和简介营销型网站方案ppt
  • 成都网站维护多少钱如何找外包网站来做
  • 深圳设计网站公司网站创意电子产品设计
  • 青岛网站设计多少钱济南网站建设 历山北路