惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
L
LangChain Blog
博客园_首页
Recent Announcements
Recent Announcements
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
爱范儿
爱范儿
博客园 - 叶小钗
博客园 - 【当耐特】
The Cloudflare Blog
J
Java Code Geeks
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans

博客园 - rosanshao

使用sc 命令写脚本 添加和删除服务 简单应用 Win 10激活 couchbase map reduce StartWith 测试 笔记,转 Couchbase II( View And Index) Couchbase I SqlIO优化 死锁检测 MemCached 安装笔记 Asp.Net异步编程-使用了异步,性能就提升了吗? Autofac Mvc Webapi注入笔记 Sql Server 2005/2008 SqlCacheDependency查询通知的使用总结 WCF HelpPage 和自动根据头返回JSON XML .net 4.0 新特性 Linq 并行化处理 IIS 假死状态处理 gmap jQuery插件开发 StatusCode - rosanshao - 博客园
WCF .NET REST调用方式
rosanshao · 2012-04-15 · via 博客园 - rosanshao

1通过WebClient或者Request实现,此方法略去

2通过WCF Client调用

  a通过WebChannelFactory建Channel

  b通过Channel就可以直接调用服务端方法

3代码

WCF服务端和客户端都引用Contact库

 [ServiceContract]
    public interface IUserService : IBaseWCFService
    {
        [WebGet(UriTemplate = "userID={userID}")]
        [Description("根据UserID获取用户信息")]
        UserInfo GetUserInfo(string userID);
    }

Client调用方式

using (WebChannelFactory<IUserService> wcf = new WebChannelFactory<IUserService>(new Uri("http://ipv4.fiddler:30760/Services/UserService")))
                {  
                    var channel = wcf.CreateChannel();
                    IClientChannel clientchanel = channel as IClientChannel;                   
                    channel.GetUserInfo(new Random().Next(1, 1000).ToString());
                }

WCF请求头设置,ContentType,Accept,这个的设置很让人头痛,查询了很多资料才找到实现方式

通过OperationContextScope来实现

直接代码

 using (WebChannelFactory<IUserService> wcf = new WebChannelFactory<IUserService>(endpoint))
                {
                    var channel = wcf.CreateChannel();
                    IClientChannel clientchanel = channel as IClientChannel;
                    using (new OperationContextScope(channel as IContextChannel))
                    {
                        WebOperationContext.Current.OutgoingRequest.Headers.Add("APIKey", Guid.NewGuid().ToString());
                        WebOperationContext.Current.OutgoingRequest.ContentType = "json"; 

         WebOperationContext.Current.OutgoingRequest.Accept                      
                        channel.GetUserInfo(new Random().Next(1, 1000).ToString());
                    }                   
                }