亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# yield在WCF中的錯誤用法(一)

2020-01-24 02:00:21
字體:
來源:轉載
供稿:網友

在定義API的時候,對于一些返回集合對象的方法,很多人喜歡將返回類型定義成IEnumerable<T>,這本沒有什么問題。這里要說的是另一個問題:對于返回類型為IEnumerable<T>的方法來說,我們可以使用yield return的方式來輸出返回集合的元素。但是如果我們不了解yield 關鍵字背后的實現機制,很有可能造成很大的問題。

這是一個WCF相關的問題,我想99%的人都有可能會犯這樣的錯誤――即使你對yield了解得非常透徹。閑話少說,我們通過一個簡單的實例來說明這個問題。我們定義了如下一個IDemoService接口作為服務契約,唯一的方法GetItems返回一個類型為IEnumerable<string>對象,并且具有唯一字符串參數category。

復制代碼 代碼如下:

  [ServiceContract]
  public interface IDemoService
  {
      [OperationContract]
      IEnumerable<string> GetItems(string category);
  }

下面是實現了該契約接口的DemoService的實現:GetItems方法返回一個包含3個字符串的集合,但是在返回之前我們需要對參數實施驗證。如果category參數提供的字符串為Null或者是空字符串,拋出一個FaultException異常并提示“Invalid Category”,這樣客戶端在輸入不合法參數的情況下可以得到錯誤消息。這樣的編程方式再正常不過了,不是嗎?
復制代碼 代碼如下:

public class DemoService : IDemoService
{
    public IEnumerable<string> GetItems(string categoty)
    {
        if (string.IsNullOrEmpty(categoty))
        {
            throw new FaultException("Invalid category");
        }
        yield return "Foo";
        yield return "Bar";
        yield return "Baz";
    }
}

可是正常并不意味著正確,客戶端其實根本無法得到服務端提供給它的錯誤消息,如下所示的是客戶端調用服務時指定一個空字符串參數情況下得到的錯誤。一個CommunicationException異常被拋出來,得到的錯誤消息為“An error occurred while receiving the HTTP response to http://127.0.0.1:3721/demoservice. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details.”

這貌似和我們預期的效果不一樣,我們希望的是客戶端拋出一個FaultException,并提示“Invalid category”。這實際上就是因為“yield”在作祟,不相信的話可以將定義在DemoService的GetItems方法替換成如下的定義,即直接返回一個string[]對像。

復制代碼 代碼如下:

public class DemoService : IDemoService
{
    public IEnumerable<string> GetItems(string categoty)
    {
        if (string.IsNullOrEmpty(categoty))
        {
            throw new FaultException("Invalid category");
        }
        return new string[] { "Foo", "Bar", "Baz" };
    }
}

再次運行我們的程序,這回可以得到我們期望的結果了。

有興趣的朋友可以思考一下為什么兩種貌似等效的方式為何會出現完全不同的結果,具體原因請看[下篇]。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲mm色国产网站| 一区二区三区视频免费| 精品国产91乱高清在线观看| 91久热免费在线视频| 菠萝蜜影院一区二区免费| 亚洲人线精品午夜| 久久久91精品国产一区不卡| 欧美成人免费一级人片100| 亚洲国产又黄又爽女人高潮的| 成人写真福利网| 亚洲黄色av女优在线观看| 日韩视频在线免费| 成人精品网站在线观看| 国产精品亚洲片夜色在线| 亚洲偷熟乱区亚洲香蕉av| 精品亚洲一区二区三区在线播放| 日本人成精品视频在线| 91久久精品一区| 成人午夜两性视频| 91精品国产免费久久久久久| 日韩精品在线免费播放| 日韩一区在线视频| 国产欧美日韩综合精品| 91国产视频在线播放| 91精品免费视频| 狠狠躁夜夜躁人人爽超碰91| 日韩免费观看在线观看| 国产亚洲欧洲高清| 亚洲欧洲日产国码av系列天堂| 精品无码久久久久久国产| 亚洲精品国产品国语在线| 懂色aⅴ精品一区二区三区蜜月| 亚洲欧美日韩国产中文| 97视频免费观看| 欧美日产国产成人免费图片| 欧美另类69精品久久久久9999| 日韩欧美在线视频日韩欧美在线视频| 日韩精品在线免费播放| 国产一区欧美二区三区| 欧美日韩午夜激情| 国产日产欧美a一级在线| 这里只有精品在线播放| 热99在线视频| 日韩高清人体午夜| 91老司机精品视频| 久久久欧美精品| 精品久久中文字幕| 日韩免费高清在线观看| 午夜精品一区二区三区在线播放| 欧美肥婆姓交大片| 亚洲区bt下载| 搡老女人一区二区三区视频tv| 欧美大全免费观看电视剧大泉洋| 在线国产精品视频| 亚洲国产成人精品久久久国产成人一区| 91精品国产综合久久香蕉| 国产一区二区三区在线播放免费观看| 日本亚洲欧美成人| 91精品国产91| 国外日韩电影在线观看| 97精品国产97久久久久久免费| 色青青草原桃花久久综合| 欧美激情视频在线| 亚洲欧美激情一区| 欧美主播福利视频| 97在线观看免费高清| 日韩在线不卡视频| 亚洲成人av片| 成人黄色免费在线观看| 国产一区二区日韩精品欧美精品| 精品亚洲精品福利线在观看| 国产精品夜色7777狼人| 国产精品最新在线观看| 亚洲精品国产精品自产a区红杏吧| 68精品久久久久久欧美| 亚洲另类激情图| 色综合伊人色综合网站| www.亚洲一二| 九九热在线精品视频| 岛国精品视频在线播放| 欧美中文字幕在线| 亚洲精品第一页| 日韩精品视频免费专区在线播放| 中文字幕日韩精品在线| 欧美日产国产成人免费图片| 久久久精品视频在线观看| 国产亚洲一级高清| 亚洲欧美成人网| 欧美理论电影网| 亚洲人成网站色ww在线| 亚洲福利视频网| 欧美激情视频三区| 久久久国产一区| 亚洲天堂久久av| 97精品一区二区三区| 亚洲精品影视在线观看| 日本人成精品视频在线| 成人免费福利视频| 欧美精品激情视频| 69视频在线免费观看| 久久精彩免费视频| 国产精品福利久久久| 成人激情av在线| 7777免费精品视频| 51精品在线观看| 色播久久人人爽人人爽人人片视av| 日韩美女av在线免费观看| 91欧美精品成人综合在线观看| 97免费视频在线播放| 丝袜情趣国产精品| 丰满岳妇乱一区二区三区| 欧美国产日本在线| 久久的精品视频| 亚洲91av视频| 中文字幕精品—区二区| 国产福利成人在线| 久久777国产线看观看精品| 色综合天天狠天天透天天伊人| 97国产在线视频| 成人激情视频在线播放| 国产精品美女久久久久av超清| 国产一区二区在线免费| 91精品国产综合久久久久久蜜臀| 国产精品一二三在线| 亚洲黄色有码视频| 啊v视频在线一区二区三区| 久久999免费视频| 亚洲精品久久久久久久久久久久| 亚洲а∨天堂久久精品9966| 亚洲二区在线播放视频| 国产成人久久久精品一区| 国产精品一香蕉国产线看观看| 国产日韩中文字幕在线| 国产精品久久视频| 国产在线精品一区免费香蕉| 亚洲激情小视频| 91精品国产乱码久久久久久蜜臀| 亚洲91精品在线观看| 日韩a**站在线观看| www.日韩不卡电影av| 中文字幕无线精品亚洲乱码一区| 国产精品91在线| 亚洲无av在线中文字幕| 91性高湖久久久久久久久_久久99| 亚洲天堂影视av| 亚洲二区在线播放视频| 久久精品2019中文字幕| 91精品啪在线观看麻豆免费| 最近2019中文字幕大全第二页| 国产91网红主播在线观看| 91精品国产91久久久久| 中文字幕亚洲一区在线观看| 欧美性xxxx| 2020国产精品视频| 97视频在线观看免费| 国产免费一区视频观看免费| 欧美乱人伦中文字幕在线| 精品毛片网大全| 亚洲福利在线播放| 亚洲人成毛片在线播放| 最近2019年中文视频免费在线观看| 国产日本欧美一区二区三区在线| 欧美性生活大片免费观看网址| 国产精品美女久久久免费|