第一次写博客体验下感觉,不废话直接进入主题
由于是初学者,对于代码的体验会更深刻。因此用更简洁的方式来描述实现的方法,自行扩展。
代码构架如下:
第一步:首先要建立服务
1、创建两个服务,ISimpleCalculator、IScientificCalculator,很简单的关系,自己看
[ServiceContract]
public interface IScientificCalculator : ISimpleCalculator
{
[OperationContract]
int Multiply(int arg1, int arg2);
}
[ServiceContract]
public interface ISimpleCalculator
{
[OperationContract]
int Add(int arg1, int arg2);
}
服务:
public class MyCalculator : IScientificCalculator
{
public int Multiply(int arg1, int arg2)
{
return arg1 * arg2;
}
public int Add(int arg1, int arg2)
{
return arg1 + arg2;
}
}
第二步:寄宿为了便于操作,我只建了一个service控制台程序,一起都实现了
app.config配置
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="calculatorServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="calculatorServiceBehavior" name="Service.MyCalculator">
<endpoint binding="basicHttpBinding" contract="Service.IScientificCalculator"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:1234/aa/"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
main方法内容
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(MyCalculator));
host.Open();
Console.WriteLine("启动成功。。。");
Console.Read();
}
第三步:客户端的实现:
有两种方法可以体现继承:直接服务的引用,默认里面会自动增加,这种比较简单就不演示了。演示另外一种,在客户端重写的方法引用服务,不用添加服务引用也能直接运行。
1、创建两个服务接口,跟服务端一样不在赘述。
2、创建两个服务实现:
public class ScientificCalculatorClient : ClientBase<IScientificCalculator>, IScientificCalculator
{
public int Add(int arg1, int arg2)
{
return Channel.Add(arg1, arg2);
}
public int Multiply(int arg1, int arg2)
{
return Channel.Multiply(arg1, arg2);
}
}
public class ScientificCalculatorClient : ClientBase<IScientificCalculator>, IScientificCalculator
{
public int Add(int arg1, int arg2)
{
return Channel.Add(arg1, arg2);
}
public int Multiply(int arg1, int arg2)
{
return Channel.Multiply(arg1, arg2);
}
}
3、客户端配置文件:跟服务端的差不多
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings />
<client>
<endpoint address="http://localhost:1234/aa/" binding="basicHttpBinding"
contract="Client.ISimpleCalculator" name="SimpleEndpoint" />
<endpoint address="http://localhost:1234/aa/" binding="basicHttpBinding"
contract="Client.IScientificCalculator" name="ScientificEndpoint" />
</client>
</system.serviceModel>
</configuration>
4、客户端main实现
static void Main(string[] args)
{
SimpleCalculatorClient proxy1 = new SimpleCalculatorClient();
Console.WriteLine(proxy1.Add(1, 2));
proxy1.Close();
ScientificCalculatorClient proxy2 = new ScientificCalculatorClient();
Console.WriteLine( proxy2.Add(3, 4));
Console.WriteLine( proxy2.Multiply(5, 6));
proxy2.Close();
Console.Read();
}