WCF使用入门(二)【四则运算】
2017-01-19 23:18
162 查看
勇敢不是无所畏惧,而是心怀恐惧,却依然向前!
Calculator.svc代码:
public class Calculator : ICalculator { public double AddNumbers(double number1, double number2) { double result = number1 + number2; return result; } public double SubstractNumbers(double number1, double number2) { double result = number1 - number2; return result; } public double MultiplyNumbers(CalculatorModel calculatorModel) { double result = calculatorModel.number1 * calculatorModel.number2; return result; } public double DivisionNumbers(double number1, double number2) { double result = number1 / number2; return result; } }
ICalculator.cs代码:
// 注意:您可以使用“重命名”菜单上的“重命名”命令将代码和配置文件中的接口名称“ICalculator”一起更改。 [ServiceContract] public interface ICalculator { [OperationContract] double AddNumbers(double number1, double number2); [OperationContract] double SubstractNumbers(double number1, double number2); [OperationContract] double MultiplyNumbers(CalculatorModel calculatorModel); [OperationContract] double DivisionNumbers(double number1, double number2); } [DataContract] public class CalculatorModel { [DataMember] public double number1 { get; set; } [DataMember] public double number2 { get; set; } }
Web.config
<?xml version="1.0"?> <configuration> <appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5"/> </system.web> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior> <!-- 要避免公开元数据信息,请在部署之前将以下值设置为false --> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <!--要在故障中接收异常详细信息以进行调试,请将以下值设置为true。 在部署之前设置为false,以避免泄露异常信息 --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> <services> <!--属性设置,name:服务的完全限定名,命名空间+实现类名;behaviorConfiguration行为配置,取设置的behavior的名称,具体可见behaviors节点--> <service name="WcfService.Calculator"> <!--定义endpoint,指定地址(address),绑定(binding)以及协定(contract)--> <!-- 属性说明: address - 服务端地址,相对于baseAddress的相对地址,如果为空则为baseAddress,也可以设定为绝对地址 binding - 绑定协议,系统的某一协议,basicHttpBinding,mexHttpBinding,wsHttpBinding等 contract - 协议完全限定名(名称空间.类型名) name - 客户端代理类的构造方法中的endpointConfigurationName对应到这个name bindingConfiguration - 指定客户端binding的具体设置,指向<bindings>元素下同类型binding的name --> <endpoint address="" contract="WcfService.ICalculator" binding="basicHttpBinding"/> <!--WCF提供四种额外绑定: mexHttpBinding, mexHttpsBinding, mexTcpBinding和mexNamedPipeBinding绑定。这些绑定在不同传输协议上使用元数据暴露服务配置信息。 小提示 以”mex”开始的绑定暴露服务元数据 Windows 通信基础架构对那些所有用来暴露元数据的绑定加上”mex”前缀。 mexHttpBinding绑定的存在是为了使用它在HTTP传输协议上暴露元数据。如果在basicHttpBinding, wsHttpBinding, ws2007HttpBinding绑定上或者任何包含了HttpTransportBindingElement绑定元素的自定义绑定上暴露服务的话那么使用它是合适的。 对大多数情况来说mexHttpBinding绑定就是你的选择因为它提供了对你的元数据的最广泛地访问。这意味着元数据可以通过客户端工具如svcutil.exe 和Visual Studio 2005通过添加服务引用来直接访问。 它也意味着元数据可以使用其他HTTP客户端访问,这包括IE, 火狐以及Opera 等浏览器。 取决于你的安全配置,这可能不是必须的(基础Http协议是不支持安全的,你可以使用HTTPS或者证书等进行加密)。 例如,如果你想使用netNamePipeBinding绑定在本机内进行通信,你可能不想使用这个绑定(这是为神马呢? 因为有mexNamedPipeBinding可以选择呀)。 --> <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding"/> </service> </services> <protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <!-- 要在调试期间浏览Web应用程序根目录,请将以下值设置为true。 在部署之前设置为false,以避免泄露Web应用程序文件夹信息。 --> <directoryBrowse enabled="true"/> </system.webServer> </configuration>
Program.cs代码:
class Program { static void Main(string[] args) { CalculatorClient proxy = new CalculatorClient(); Console.WriteLine("输入Number1"); double number1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("输入Number2"); double number2 = Convert.ToInt32(Console.ReadLine()); Console.Write("\n\n"); Console.Write("结果\n"); Console.Write("===================================\n"); double addResult = proxy.AddNumbers(number1, number2); Console.WriteLine("加法运算: {0}\n",addResult); double subResult = proxy.SubstractNumbers(number1, number2); Console.WriteLine("减法运算 : {0}\n", subResult); double mulResult = proxy.MultiplyNumbers(new CalculatorModel() { number1 = number1, number2 = number2 }); Console.WriteLine("乘法运算 : {0}\n", mulResult); double divResult = proxy.DivisionNumbers(number1, number2); Console.WriteLine("除法运算 : {0}\n", divResult); Console.Write("===================================\n"); Console.Write("请Enter退出..."); Console.ReadKey(true); proxy.Close(); } }
App.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_ICalculator" /> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:15468/Calculator.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICalculator" contract="CalculatorService.ICalculator" name="BasicHttpBinding_ICalculator" /> </client> </system.serviceModel> </configuration>
项目运行结果如图:
相关文章推荐
- [原创]WCF入门级使用教程(转载请注明出处)
- 微软同步框架(MSF)入门之五--使用WCF同步远程数据
- 中缀/后缀表达式转换-使用四则混合运算表达式生成树
- wcf使用入门学习笔记
- 使用Visual Studio 开发、调试WCF入门-2-无脑建立客户端
- 使用 正则表达式 验证四则运算表达式
- <Power Shell>01 四则运算和数组简单使用
- 使用原生的javascript进行字符的四则运算。
- 使用原生的javascript进行字符的四则运算。
- 使用Visual Studio 开发、调试WCF入门-1-零代码开发、调试WCF服务器端。HelloWorld
- 微软同步框架入门之五--使用WCF同步远程数据
- 微软同步框架入门之八--使用WCF同步远程元数据
- 微软同步框架入门之五--使用WCF同步远程数据
- 使用原生的javascript进行字符的四则运算。
- Silverlight 4 WCF RIA Services 使用入门
- 【转载】WCF入门级使用教程
- 微软同步框架(MSF)入门之八--使用WCF同步远程元数据
- Silverlight 4 WCF RIA Services 使用入门
- 第7周任务3(使用类模板,实现复数的四则运算)
- 使用Visual Studio 开发、调试WCF入门-2-无脑建立客户端