关于契约
三种契约
Service契约 包括接口和方法(operation契约)
Data契约 参数,实体,XSD
Message契约 SOAP中的消息格式(还有Fault契约)
WCF异步调用,这个一定要在Client端添加Service Reference时,在高级选项中选择“生成异步调用”才生效,如下所示:
相应的Client代码:
class Program { static int c = 0; static void Main(string[] args) { ServiceReference1.Service1Client client = new ClientConsoleApplication.ServiceReference1.Service1Client(); IAsyncResult arGetData; for (int i = 0; i < 10; i++) { arGetData = client.BeginGetData(1982, GetDataCallback, client); Interlocked.Increment(ref c); } while (c > 0) { Thread.Sleep(1000); Console.WriteLine("Waiting...Calls outstanding:{0}", c); } client.Close(); Console.WriteLine("done"); Console.ReadKey(true); } static void GetDataCallback(IAsyncResult ar) { string str = ((ServiceReference1.Service1Client)ar.AsyncState).EndGetData(ar); Console.WriteLine(c.ToString() + " : " + str); Interlocked.Decrement(ref c); } }
One-Way 只发,不feedback。但是要确保Server接收成功。
今天犯了一个低级错误,写了这么一个契约及其操作:
public interface IService1 { [OperationContract(IsOneWay = true)] string GetDataFast(int value); [OperationContract] string GetDataSlow(int value);
}
然后就不能运行了。这是因为,IsOneWay既然是只发不收的,那么它对应的方法就一定是void返回类型的。
正确的写法是:
public interface IService1 { [OperationContract(IsOneWay = true)] void DoFast(int value); [OperationContract] void DoSlow(int value); }
在Client调用的时候,你会发现,DoFast很快,DoSlow很慢。这是IsOneWay的作用。
Paired One-Way是两个One-Way,而Duplex是一个。
对于双工(Duplex),这里有一个全景图,看明白这个就够了:
建议大家下载我写的游戏大厅,完全是基于WCF Duplex机制的:GamePlatform在CodePlex上正式挂牌
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架