WCF REST (二)
今天主要写下 POST等其他方式 发送请求 以及 流方式 文件的上传与下载
一.Post 提交数据
先来想下 POST和Get 的不同 Get 方式 我们直接通过 url 来传递参数 先来看下我们的 创建方法吧
[WebInvoke(UriTemplate = "Tasks/Add", Method = "POST", RequestFormat = WebMessageFormat.Json)] void Create(PocoTask pocoTask);
我们需要接受一个实体类 格式为json格式 这就再次出现上文的问题 我们的客户端没有实体类 没法把实体类序列化为json 难道要自己拼接json么? 当然不用。那简直太痛苦了。
这里给大家推荐Json.Net 这里有两个类 可以帮我们完成 单个实体的转换 以及集合实体的转换 分别是 JObject 和 JArray
我们只需声明这两个类后 .toString 就可得到他的json格式了 很方便吧~ 看代码
这里完全可以不用dynamic的 像注释那样的写法就行 这样即使服务器不支持.net4.0 也可以使用的
知道了如何构建POST 提交的数据 就开始实现POST提交吧~ 上代码 依然是三种方式 放一起 对比
这三个方式 个人很推荐 第三种 也是目前最新的 .net4.5里集成的 访问REST 非常的方便 因为他支持 直接点出来 PUT 以及 DELETE请求
简直是为rest 量身定制的~~ 看下 PUT请求
这里需要注意下 因为我们发送的是json 不论是哪种发送请求的方式 都要记得 设置ContentType=application/json
否则会抛出 HTTP 400的错误 400-错误的请求 很多都是客户端请求不正确造成的 所以一般出来400错误 可以重点检查下 客户端请求的问题
因为 PUT 与 DELETE 和 POST 基本类似 我就不上代码了
二.REST 的文件上传 与下载
流文件的上传和下载
先来看服务端的接口与实现
我们要实现三个功能
1. 展示一张图片
2.下载一个文件
3.上传一个文件
一个一个说 先说展示图片 实现代码
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAs8AAADXCAIAAABqCis/AAAWUElEQVR4nO3dMdLruJUGUK9Fkau31YF34Lhjl7OOHHsFjmYJvQ9HEzhpewMTvBoVTQCXFyQggdJ5deoVBZEgCFLiJ1A/9YfHH38CAJjnD29vAQDw2aQNAGAuaQMAmEvaAADmkjYAgLmkDQBgLmkDAJhL2gAA5pI2AIC5pA0AYC5pAwCYS9oAAOYanDZ++eWXK4UAwOcZmTYmRY2Vc8nKbQOARayeNtY/na/fQgB4r2Fp4zujxr3aCQBvsW7aaC37/Pd8uH1qN8/u2V3h7qldSbXO6vz5jQKALzQmbbwsapTTQeH2/7iwOh3kCd97BYC8RdNGsHgmBOTTxrbaZJ4QNQCgy4C0MSNqxPMHAxLbiWTaOBzn2BWWT4kaABBYOm080sGiWnjxSkpyY0UNAIhdTRtTo8ZuwV82/3YzlP8em2DRKqwuHqyo3ApRAwAO3SBtrOMDNgEAXm/k3b0+WGuoAwA4JG0AAHNJGwDAXNIGADDXDdLG3/7+l+Sz5ZzVZZ+FQc1/+/tfnsqH55raNWe8XedWmmxY7OJ2AfCFBqeNGX+icuXEXH1qO9E6j+5mzgSUzLP5s3iwIa054zqTq+5Nb/l2AvC1RqaNgVHj4ifsR5ESHo208WicIBcZ2ziRS+LKD4dM4igmbQBwwqJp46nr/F2eIIO0ceJSxWEuOYxEydGFw02o1pbZnGTaaFUobQBwwrC0Mek2X/nP4ruSeNyia9PyFxdOtDZTGGzLYZOu9Gcmx1wZfwLgSyydNpKfm3cn4yBtJE+NwWzVmQ+nD2sONupw5uFpoxoy8msHgJ11f3E+Pq+3Fqn+f1jD4en5xPn7+thG/uLIlRGIYNnMLpA2ADi0aNoohysyQ/RdaSP5Kb/1cFeeH7HIj6y05q/O2drM4Klk9DmRY3qPHwA+29K/OJ8f29jmku3EubQRnDLjj/tjxzaCrYsXH5I2kjnGaAcAhz4hbQQJI14kc3miHGPINziu9nAUZLtIUH/+fJ/pzzh4nagBAJb+xfnec1smbbRO3q117eq8njbOFcbDLclmJPszdm5zAPhmN0gbvYMB25Jdnoi/dhCUDxnb6DqL79bb2oTqNl4ZAslvYD79APDlbvA7KQDArUkbAMBc0gYAMJe0AQDMJW0AAHMNThtT/0Rl4OIAwMus/ovz1ZkXjxqLNw8AXmz1tDFjXOQF1m8hALzM0r84f9Ooca92AsBs66aN1mzVCyvPf8+H26d28+ye3RXuntqVVOuszp/fUgD4bIv+4nxX1Cing8Lt/3FhdTrIE7ceiQGAeRZNG711ZkJAPm1sq03mCVEDAFqW/sX5rgsTwYDEdiKZNg7HOXaF8aALAHyzpdPGI32y303Pu5KS7AFRAwCerqaNqVFju2Bwpm99Q7P8t62tVVhdPFhR2TZRAwC2bpA2hiw+z7INA4BFDPsL2C/UGuoAALakDQBgLmkDAJhL2gAA5pI2AIC5BqeNl/2JymeL/+h3HaPauf6WAnDFyLQxKWp826koOIWf64rqXUMmtfOw5kXuhPZtBxXAe62eNr7wrDBjYGN347Kp7QzqX2qU6wsPLYB3GZY2RI2VzUgb8equFL6yW964doDvsW7aKIfoW/cOLwt3Fw5acwZ1lo2pVthVZzxnpgHVbQlW9Mt/J4zt/xcbf2L3Hc7Wtfbnw1a3JHdxfosAOG1M2si/jyff3A+X3Z1Hq9PBCe/wNFxde7nSfJ2tdl7p53hF5RozTRrY+Ori8V5+yy4WOABmWzRtVOcMznnVz76tasvckEwbybW3Ttjxh+wTfXIxbUxtfJADltrFogbACwxIGzOiRnX+4DNuPEMw5/W0kayzep7rPYtn0saz5taGD2l8VzsP9+a7drGoAfAaS6eNx4XTT/Jz88W0ka8z86G8t6vzyaCaNiY1PpghnxVesItFDYCXuZo2pkaN3YKtYYByhCA553b+x3+fics27M7T1VbFdVablO+E6jaWKyq3vXx4okOSjU/OcNjPv0zexYftBGCgG6SNgTV8g12YeHt7DhuZKQfg1gZcSXmN5Gdr7ttXN202AIdukzYAgJuSNgCAuaQNAGAuaQMAmGtw2njln6jc1zdvOwBfaGTamBQ1Vj43n7j/xMqbs37zALij1dPG6ZPfy86awYrGDuqssEUAcMKwtLFU1Li47ArbvuAWAcA566aN6jWI3f2nt+XPkvKu1btFqtPBRLmiw+sjyXtl3miLAOC0MWmjembKF+Znq54vD6cP52yFgO2cceWtOTMdsv4WAcAVi6aN/OLVz/2tOQ+nD+dMJokrHbLmFgHAaQPSxoyo0Zo/P+A/49zc1YZM/rjXFgHAOUunjXKRSZ/vM3PmF++a7V5bBAAnXE0bU6PGbsHq9YVteblga87nU2Wd1YettR9u1HPZ1rO32yIA6HWDtPEBvnnbAWDMt0QBAFqkDQBgLmkDAJhL2gAA5pI2AIC5pA36/P7v/7y9DTeiuwAer0wbv/7286+//dwqbz11enV/+us/nt7eyz/8/u//PD0fjqrwNWe14Wu5sovHNrLcNaM2VuAAeOnYRnBqGXvW2SaM1vSLbU85z+kh56FXnswy65oRIF62dWN3zfCqAG7q89NGpvwFqqece6WN5IqkjdNdB/CprqaN53WQ7dWQeLp63WRXEswWXHnZ2gWL7YWV3WjHj4fV8lYlcZ0t5SmndUllN5K/HeEv599Nt66txIXVSg7bv9sd1YNhewxUD4Z4tq79HmxLZtt3nRzvjnwnV7sO4KsMGNvYnTB6C6sPD+fJfICuxoXe2bbZolW4/T9WPRc+p3cTZWF5Imw93M0ZX8cJskuwotbuCL6dk9nF5dFSPX7iTs53SLm9+a7LzFl9CPBt7po28g6/t1EWBoMW5fDGoydt/JAMAWXh6bTxfCqTb4IP7uUOOhymivddJlC+N20EXVfWme86gK8ibdTTRlzVHdNGkC2C2jJPndiVmWWrF1m6uvewQ1rbXg5BZXbHia4D+BJ3TRvxuafrb1LitDHqSkpvsGhNH34n4MSVlMN2Vkt6r6RUu6VrbCOpt0OqPTPwSoqoATAmbVS/wVd+ZzD4CuGuPP6+YeYroq0vb7a+DRpfMSln3s5Q/Z7pTjnGXn1YfepZ+ChOY7tqtxOtOnczV1dUFm7bEO/3RzEUkdzv1WMgXlHQyXGHZHZHq9pMJ7c6DeA7DR7b4EbOff5+/bmz99vB87b94ooAvtawv4B9+5ZwQjCMsZQZh9ldth3gA/idFABgLmkDAJhL2gAA5pI2AIC5RqYN37kDAEqD08bbtwcAWI20AQDMJW0AAHNJGwDAXMPShqgBAFQZ2wAA5pI2AIC5pA0AYC5pAwCYy71EAYC5/E4KADCXtAEAzCVtAABzSRsALME3/z6YtAFwY//68+e8jUsbH+xzDlOAz7M9Af8IFtt4sSspk8dbskjZzmSMkDY+2CenjV9/+3l4nT/+yjd+ScTzvOvvhJ+tWuH1/GzG8//r3bXduuFbOrCqP/31Hz/spkdVfqVJF9szcENe5uJhs31ZnThIMm8mz+nyFL71rz//IYgaP57dqs62m/lcl7bamemfFd6dmORmaWNGgMh7vhIuvmxe/4rarvHc2oe3eZc2hqx6wc2s2p6VT+eD1Zq0oOSG7NJG71q6jrpyhlFpo6ocBSmnM8t2kTaokjY69H7oGVLP61v+mjZLG+X0uRqGN+lj3D1tXDwa4wGM3sWHONE/fIx108avv/38tHu4zRy7GXbLxrNVV1QVjJe2BlGrJeXMrZLH0Xvf//7zf3bi/gyavWvDrp35be8aVW6ljaCLut6q4jrzm9m1g5JNbaWN6oWM3QWO1iWPVsl2olXnthnbiXLx1mWgoOVlA8pVBysKGn9u8ephU92hycM7edTFiyffQ7q00sZukKN10aR6XaZ6FSZ/5aW6Rdc/JHALi6aNXVCoTm8LW+Wt2YKJQPx2UJ54DueM36eG92rmXTLzNnq4eJkhWp25m7OrSa0NLN/lr2xma2+WVVUrr6qeC6sRJMglrZrLFbXqrCaAal7JNKnaqmpWqG5ma0Xb/7sWD3qpunNPH4q9EaRce+vIufImEGSF5DdJg6GRVnBJdvWVGbivRdPGo5EhMqmiVV5NLW9PG4dvVcNVP1ftZsh8zApO7cm0UX6qy8eF5KYFi3d9muzKjpm0UU7HAx5BDUF5vKJz+aY3bZze9lbaSAa1oJeqOzd4LeQjSFnz4Us7/x7SJf7G6OHMZWHrS6Zd3yeVNr7ZumnjhyAxxIXxstWLLIdmpI3kikq9V1KCllRXd/jGFyyVSRvV2Q5bMjBtJDczvzcf6UGp3rN4WXIlbTyOhhwyi2caeVhyLm30tvNQ66CNc2T+Vfz6tJG8MtI1fxwpkoFD2vhmi6aN3isph5W06un62unUtDF1bONiO/PbXn3jboWhOG3EvVStM794b8+fzo7VdvaecePpVs2ZOk806bFM2jjRS8Fhszsazx1L5bPBdO+zebPTxrkrKZltkTY+2Lppo/XNzerXP4PC3ZdMd5VkviL6w++1Sx7b8uqch+XxbKP6M6iztTnVOeNtf04///8xkU8b+Q4p69zOc6WTD/dasNWZdm6vApRXBKrfnGhdTGnNGVRerXO3bLz482F1o1rVtnogeLhLG4fzB91yeNiUB22864NDKzhyygOsdSztXiNdWtGh9Y2N8vpIfNGkWnLlSxtx3uJjLJo2XuZw4OSzeW1P6syVO/bEtQZ+eMtu7V3pmjcyD7biLi8cLlrxuHyx5NjGhxk+fMKNerU1XkLgLjv31nTvB5M2AFiCtPHBpA0AYC5pAwCYS9oAAOaSNgBY0cpf41i5bWtaMW0Ef2rfmrPrqZdtxcUeePsmHJpxa5B57XzZui725OKdmdmEtzdm2S692J7VtmhqJ1fvhXOxz8c2dZG9cBcrpo1H4zaCwZytwhecrYev4vrtEC42Kbn42/9KPrnS7a2TRtU5e3Nu9y52vfEXN7l1Ztr+/3YXD8Vv6+SBFe5uobZgC7/BB6aN8saFL2jqUrW9IG2s8DI78ZZ9uIi0MWlHzK4kc5/Ke/XS9ZuK3rqTx9Y5KW1M2vZPdbO0kbm1czVtVO+sHNe5najO2aqzdREkvpN0tfEnFu+6XfSuPFh8p/oaa92DeTeMGRQ+H2aWzQyKVt+yg/qrdVbL8yXlNlbrPFx7sHim8Sea1Fp75mAYsjevHwytbdktle/5nfyPI/b2Uln4VZ18OFumzl3vbf/P93xXOw931je7U9qoXmIoC1tjG8nFn9PBGEnmYkdm8TJnZGoLFm81Kd72E6NBrZfT7pW8na6+UMuXdDndes/NvKRb9QftbNWQXKT6JtWqqqwn2SEXCzMtyfd218GQ35tDDoax/XnFiZfMN3dy5ixezRCHL65MkzJzxn1Cad20kfzgfj1ttMYngoYNTBtx43sXbzUpHoaJW1518a2zVVj9bNFVZ7yKt6SNoKrMW3DZIc/y/IqSG1KNSuXarxwMXT1//WBo7dDDepLbnlfWfLiLv7mTX5A2WrujWmdXO6laNG08GpdRWrO1Fnkk0kaw9lbhHdNGq9rV0sbFOuMKz72fJk/thw+TcSG/jZl38976e3s4mO36ifDEJh9Wkj8RZrb93JWUEy3/tk4+nTYeRy+uuCVxgkm2k6q7po1khji3+OPohD0vbVwvzDc+fyWl+jZ68W2uWnixzridmXouvh3HD+M3r4tx4WWFFw+Gcz1/7gDLdHXviq4YeCh+QycfluSTQTVtBE0K6pxxYHyJO6WNR+NCRln4LK8ue7HOw+sR8WzlRZyykkw7g8XjzS8fHvZe60Pb70df0Xq+aMs5q4VlndWHu5mT7Ww1Pq4z2c54w3c1l3UGm5nsuov9md/McwfDib05fPFteetIyCx+RXwoHs78VZ2ceXE9Z+t6cbWqbdUZ9HxrLw88Zj7GumljuMwFAtjZvTfdok66OkrXLdvJJ5aa8eLqbZsjqupb0kZ1tAAy5n3GHRg1hrfw87xsAOObrdDJ9umaviVtAADvIm0AAHNJGwDAXNIGADCXtMH7+T6XPgQ+29eljcyfTb/mK82t23J0LX5iw3u3K17kei/lbz+Qn+c130g//Ud95b0B3tgegBf4rrRRvcHL4czzZO5JGsyQTxsX/wb9lX+2PmofrXzqbd1raGxPAqzjS9PG8JnPeU3amDH8MG+PjNpHK596J6WNxbca+GYrpo1ff/v5h910+fBZsp2oKu9NuyuvLtKqJGh8/leaHuEPnVTvMl7envyRuKQSn5Krd+dt9VLcdbsLBJmua63lxOKjmpoRd1Gr8buEsf2/a3d0dUh8AAC8xopp4/HHn3Z5Iih8HOWMreAy/2HhxYsRVUGGiKe3i7ee7drq+EQYbHv1LFitM7P4Ycnh2ltbVJ2+uB+ra291XdmMTCdf3B0Ai7hT2ng+LIc3ktVeTButD5qnBREhTiFlyTppo1pn8Bn9sLWT1n59J45NG7vWxnXm+xNgBYumjcf/Z4gyauwmynkCo8Y2AqevpFTLPyZt5Ns2dWzjxA4NZNLGozaIsssNQZsPd8fwjQKY4U5pIzMdG5U2po5tdF1JKaerESd/iWF22jiMF1PTxmFLuvZs19hGdcFyGOPK7hA1gGWtmzYetRjxvIxSfo30MHO0htPL8mDsvfeEFAjutBF8LbT86ujuqdaASmvgvdzwx+b0tp047LpWbXHXteqMG3+4j+K1B8tm9l1r2zNdVz5sVduqM9ibrdYOOWIBTls6bfAl1jkdDm/Jy8YegsrX6V7ga0kb8NOj/zJKb81O+cA3kzYAgLmkDQBgLmkDAJhL2gAA5pI2GOBdf20BwC1IGym7G2DsbpJRPjz8pbTY2D9haN2aYlTDqiWHd4Poao/AAXBrn5A28vcSvaLr1+GT81RV7/t00cC7Phymja72SxsA30DayOpND+fSRvLukFeqHZs2MkMd+dqGzAnAahZNG7sbk+/Kt7/NVt65/HA6mAi0fiktuPt4WXJ4haV6Lg8uhbRuFp65UXe5eKYwSButdgYXTZJXYapztgoBWM2iaeNRSwD5X2UL5qz+fn2rnq3WlzYeiR9Xe5z9vdbWr2nEheUM25/bqK7rxIqqD6slQXmmSXG1AKxv6bRRllR/g60rbSTnLFXHNlolZWHwJdOt3rRRjiXEcSEzFLF9Kqiz+rBaEpQHIyjSBsDHuFnaODHn8LSRfCr+u5WW02Mb1RoO00bchveObSSrBWB9d00bbxzbSD6VuZJS/XX4w3P8ucsrwwtbJTOupIgaALe2aNqoXjHZllfnb9Ww/Spo9UumrUqegm9slNdHWhdNypJq2njUbmuRv+RRfVgWVuc/XOrwGkd1nq4Kuy6jSCEAt7Bo2mBn8dPq1Oa5vAJwd9LGDVQ/7gPAXUgbAMBc0gYAMJe0AQDMJW0AAHMNSBu+wAgABMaMbUgbAECLtAEAzCVtAABzSRsAwFzD/iZF4AAAqoxtAABzSRsAwFzSBgAwl7QBAMzlXqIAwFx+JwUAmEvaAADmkjYAgLmkDQBgLmkDAJhL2gAA5pI2AIC5pA0AYC5pAwCYS9oAAOaSNgCAuaQNAGAuaQMAmEvaAADmkjYAgLn+D4KFQQM+t3iSAAAAAElFTkSuQmCC" alt="" />
这个是在浏览器中直接打开 比较简单 这里记得设置输出的 ContentType 有时我们想打开的是别的格式 这里有个小方法 根据文件扩展名获得输出的ContentType
也就是上面用到的GetContentType方法 在园子的知识库里发现的GetContentType
客户端 非常简单 直接引用连接即可
2.下载
上面的是直接把文件显示在浏览器中 如果我们希望下载资源呢 方法也很简单和以前的方法是一样的 直接上代码
public void GetExecl(string execlName) { string folder = System.Web.Hosting.HostingEnvironment.MapPath("~/Files"); var FullFileName = Path.Combine(folder, execlName); if (File.Exists(FullFileName)) { FileInfo DownloadFile = new FileInfo(FullFileName); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ClearHeaders(); HttpContext.Current.Response.Buffer = false; HttpContext.Current.Response.ContentType = "application/octet-stream"; HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.ASCII)); HttpContext.Current.Response.AppendHeader("Content-Length", DownloadFile.Length.ToString()); HttpContext.Current.Response.WriteFile(DownloadFile.FullName); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); } }
3.上传 这个文件上传 才是重点要说的 折腾了好久~
首先要说的是 一定要记得配置文件 如果用REST 模版 配置方法如下
<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> <standardEndpoints > <webHttpEndpoint > <!-- Configure the WCF REST service base address via the global.asax.cs file and the default endpoint via the attributes on the <standardEndpoint> element below --> <standardEndpoint name="" maxReceivedMessageSize="3000000" defaultOutgoingResponseFormat="Json" helpEnabled="true" automaticFormatSelectionEnabled="true"> <readerQuotas maxArrayLength="300000"/> </standardEndpoint> </webHttpEndpoint> </standardEndpoints> </system.serviceModel>
这样就可以上传大文件了
客户端实现上传很简单 借助 HttpClient
本来写到这 以为上传很简单的就能完成了 结果却弄了好久
先说下以前的写法
以前这样 都能成功 谁知道这次移到 REST WCF 中 竟然报错 发现不能读取Stream.Length 在这里问下各位高手 ~为什么读取Stream.Length 会报错?
CSDN 的 fangxinggood 给了解释 非常感谢
因为它被封装成了MessageBodyStream,就像WCF Streamed的数据一样,Length是不支持的。WCF里是客户端一边传服务端一边收。到达服务端开始写IO时,流并没有全部传输完,所以 MessageBodyStream不支持Length。但REST时是Http协议,所以其实Stream已经全部到达服务端了。如果你想取长度,可以 用: var len = WebOperationContext.Current.IncomingRequest.ContentLength;来获得。
如图
最后就会抛出Http 400的错误
百思不得其解 只好换了另一种方法这种方法不需要 长度length
可是却发现在 转化成byte 这次是报错 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非空白字符。
再次请问原因? 希望遇到过的朋友告知
解决办法
后来 通过谷歌 发现另外一种 获得长度的方法 在WCF REST里 这样就能用第一种方法了
把最早方法里的
long ByteLength=stream.Length;
换成
long ByteLength = WebOperationContext.Current.IncomingRequest.ContentLength;
这样就可以得到长度了 上传问题也就解决了~~
这里说下 如果上传的是图片 有个很简单的方法 核心代码 简单两行即可~
三.Session与Cookie
在WCF 里 是可以使用session的 但是在REST 的WCF 里 貌似却不能使用session 查了些资料 没有发现使用session的办法
可能是因为使用session会让服务器和客户端耦合。 后来找到了 REST 常见误区 http://www.prescod.net/rest/mistakes/
里面提到了一条 session 是无关紧要的。
cookie 还是可以正常使用的 这里说下 客户端读取cookie的方法 webclient 貌似不能读到 要使用更加灵活的 HttpWebRequest
主要是这两句
CookieContainer Cookie = new CookieContainer(); request.CookieContainer = Cookie;
四.总结
在做这方面的工作 把经验分享给大家 也希望会的人 能解答下我问中的问题~~
REST WCF 体现了ROA 面向资源编程 感觉更好了解耦了客户端与服务端 而且调用 REST 服务 也简单了很多 没有了代理等 效率也提高了 喜欢这种风格的方式
参考:
http://blog.csdn.net/fangxinggood/article/details/6235662
原文:
http://www.cnblogs.com/wlflovenet/archive/2011/10/28/WCFREST2.html
WCF REST (二)的更多相关文章
- WCF服务二:创建一个简单的WCF服务程序
在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WC ...
- WIN8+VS2013编写发布WCF之二(部署)
上文简介了如何建立WCF工程并且调试,下面说一下如何部署. 本文将陆陆续续讲述三种部署方式,随着项目的进展将不断补全. 声明: 用管理员身份打开VS2013,发布前请将程序的.net版本改成与服务器相 ...
- WCF(二)
摘自:http://www.cnblogs.com/yank/p/3666271.html WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK ...
- WCF入门二[WCF的配置文件]
一.概述 往往在很多项目中数据库连接字符串.变量和一些动态的加载类会写在配置文件中.WCF也会在配置文件中写入一些配置参数,比如服务的地址.服务用于发送和接收消息的传输和消息编码等,通过配置文件可以灵 ...
- 【WCF系列二:如何调用WCF服务】WCF入门教程(图文)VS2012
上一遍到现在已经有一段时间了,先向关注本文的各位“挨踢”同仁们道歉了.小生自认为一个ITer如果想要做的更好,就需要将自己的所学.所用积极分享出来,接收大家的指导和吐槽.网上也有很多WCF相关的教程, ...
- WCF(二)三种通信模式
WCF在通信过程中有三种模式:请求与答复.单向.双工通信 请求与答复模式 客户端发送请求,然后一直等待服务端的响应答复(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序 请求 ...
- WCF基础二
1:地址 . WCf 的每一个服务都有一个唯一地址,地址包括传输协议和服务位置. HTTP:采用http\https协议进行传输,默认端口为80. TCP:采用ne.tcp协议进行传输,默认端口为80 ...
- WCF(二)配置文件
上篇文章中对WCF的配置放到App.config中,这样可以使程序更灵活.更具有扩展性. 下面说下配置文件中各个节点的含义. 服务端: WCF配置文件节点放在<system.serviceMod ...
- WCF学习(二)
WCF通道模型 绑定的本质是一个配置好的通道栈,为了方便程序员专著与业务逻辑,WCF提高了一系列常用绑定.随后会有相应的自定义通道栈代码 无论交互的另一方具体位置在哪里,WCF都会为消息的发送和接收建 ...
- WIN8+VS2013编写发布WCF、一(编写)、二(部署)、三(调用)
原文://http://www.cnblogs.com/tntboom/p/4348483.html 引言:上学期因为写服务器用WCF,所以连查资料再瞎调试勉强成功了,但是这学期又到了用WCF的时候, ...
随机推荐
- 关于【搭建LAMP环境时,php测试页面打不开】解决
关于[搭建LAMP环境时,php测试页面打不开]解决 〇.我的测试页面是: http://172.30.124.10/index.php 用火狐打不开,如下图. 一.httpd已经启动了(system ...
- mysql省市区数据库表源码
下载 一:创建表 1省: create table CREATE TABLE `provinces` ( `id` ) NOT NULL AUTO_INCREMENT, `provinceid` ...
- 一招制胜---详解分布式系统里session同步
一招制胜---详解分布式系统里session同步 几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同 ...
- cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁
1456. [UVa 10881,Piotr's Ants]蚂蚁 ★ 输入文件:Ants.in 输出文件:Ants.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述 ...
- 常用Linux命令 mount df dd
mount -t tmpfs tmpfs ~/build -o size=1G -t 对应的是类型 -o 对应的是选项 tmpfs是Linux/Unix系统上的一种基于内存的文件系统.tmpfs可以使 ...
- C# Excel文件导入操作
Excel文件导出的操作我们经经常使用到,可是讲一个Excel文档导入并显示到界面还是第一次用到. 以下简介下在C#下怎样进行Excel文件的导入操作. 首先加入两个引用 using System.I ...
- POJ 2455 二分+网络流
题意: 思路: 莫名其妙TLE 啊woc我A了一坨题的网络流模板有问题 !!!! 在常数上会慢 (一个等于号 啊啊啊) 改了所有网络流有关的文章- .... //By SiriusRen #inclu ...
- uva 11248 最小割
Dinic 1 #include<iostream> #include<string> #include<algorithm> #include<cstdli ...
- HDP和HDF
参考文档: HDP安装: 官方文档:https://docs.hortonworks.com/HDPDocuments/Ambari-2.5.0.3/bk_ambari-installation/co ...
- 微信小程序---app.json中设置背景色不生效解决办法
按照官方文档的说明,backgroundColor应该可以设置窗口的背景色. "window":{ "backgroundTextStyle":"li ...