您的位置:首页 > 其它

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>


项目运行结果如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: