为什么WCF中不允许重载方法?
假设这是一个ServiceContract
[ServiceContract] public interface MyService { [OperationContract] int Sum(int x, int y); [OperationContract] int Sum(double x, double y); }
在C#中允许方法重载,但是WCF不允许你重载operation contracts
宿主程序在托pipe时会抛出InvalidOperationException
简而言之,不能重载方法的原因与WSDL不支持C#中存在的相同的重载概念有关。 以下文章提供了为什么这是不可能的细节。
http://jeffbarnes.net/blog/post/2006/09/21/Overloading-Methods-in-WCF.aspx
要解决此问题,可以显式指定OperationContract
的Name
属性。
[ServiceContract] public interface MyService { [OperationContract(Name="SumUsingInt")] int Sum(int x, int y); [OperationContract(Name="SumUsingDouble")] int Sum(double x, double y); }
因为当通过HTTP / SOAP进行调用时, 在你的合同中使用相同的方法名就意味着无法确定客户端要调用哪一种方法。
请记住,通过http调用web方法时,参数是可选的,如果缺less,则使用默认值进行初始化。 这意味着这两个方法的调用在HTTP / SOAP上看起来完全一样。
- WebClient与HttpWebRequest / HttpWebResponse
- 自MS14-059以来,System.Web.MVC不会复制到bin文件夹中。 如何防止由于Windows更新而创build缺lessDLL的生成?
- 如何序列化一个对象到XML而不会得到xmlns =“…”?
- 在覆盖成员时,违反了inheritance安全规则 – SecurityRuleSet.Level2
- 如何获取当前正在执行的DLL的位置?
- 在c#中引用types和值types有什么区别?
- LINQ to SQL和存储库模式
- 将对象设置为null与Dispose()
- 在即时窗口中dynamic导致“Microsoft.CSharp.RuntimeBinder.Binder”未定义或导入错误