一个WCF宿住如何发布两个接口

本文介绍如何在WCF中搭建包含两个独立接口的服务,并通过WinForm应用进行调用。详细展示了服务端与客户端的配置过程,包括接口定义、服务实现、宿主设置及客户端调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务端

建立第一个接口ISrevice1:

 


 
  1. [ServiceContract]

  2. public interface IService1

  3. {

  4. [OperationContract]

  5. string GetIService1();

  6. }


实现IService1:

 


 
  1. public class Service1 : IService1

  2. {

  3. public string GetIService1()

  4. {

  5. return string.Format("You Called: IService1");

  6. }

  7.  
  8. }


建立第二个接口IService2:

 


 
  1. [ServiceContract]

  2. public interface IService2

  3. {

  4. [OperationContract]

  5. string GetIService2();


实现IService2:

 


 
  1. public class Service2 : IService2

  2. {

  3. public string GetIService2()

  4. {

  5. return string.Format("You Called: IService2");

  6. }

  7. }


新建一个WinForm项目,作为宿住,并引用WCF服务,并打开两个接口

 


 
  1. private ServiceHost host1 = null;

  2.  
  3. private ServiceHost host2 = null;

  4.  
  5. private void button1_Click(object sender, EventArgs e)

  6. {

  7. host1 = new ServiceHost(typeof(WcfServiceLibrary1.Service1));

  8. host2 = new ServiceHost(typeof(WcfServiceLibrary1.Service2));

  9.  
  10. host1.Open();

  11. host2.Open();

  12.  
  13. label1.Text = "服务已启动";

  14. }


主要是配置App.config文件:

 


 
  1. <?xml version="1.0" encoding="utf-8" ?>

  2. <configuration>

  3. <runtime>

  4. <legacyUnhandledExceptionPolicy enabled="true" />

  5. </runtime>

  6. <system.serviceModel>

  7. <bindings>

  8. <basicHttpBinding>

  9. <binding name="NoneSecurity" closeTimeout="00:01:00" openTimeout="00:01:00"

  10. receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"

  11. bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

  12. maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"

  13. transferMode="Streamed"

  14. useDefaultWebProxy="true">

  15. <readerQuotas maxDepth="64" maxStringContentLength="2147483647"

  16. maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

  17. <security mode="None">

  18. <transport clientCredentialType="None" proxyCredentialType="None"

  19. realm="" />

  20. <message clientCredentialType="UserName" algorithmSuite="Default" />

  21. </security>

  22. </binding>

  23. </basicHttpBinding>

  24. </bindings>

  25.  
  26. <services>

  27. <service name="WcfServiceLibrary1.Service1" behaviorConfiguration="CalculatorServiceBehavior">

  28. <host>

  29. <baseAddresses>

  30. <add baseAddress="http://127.0.0.1:8000/"/>

  31. </baseAddresses>

  32. </host>

  33. <endpoint address="" binding="basicHttpBinding" bindingConfiguration="NoneSecurity" contract="WcfServiceLibrary1.IService1">

  34. </endpoint>

  35. </service>

  36. <service name="WcfServiceLibrary1.Service2" behaviorConfiguration="CalculatorServiceBehavior">

  37. <host>

  38. <baseAddresses>

  39. <add baseAddress="http://127.0.0.1:8001/"/>

  40. </baseAddresses>

  41. </host>

  42. <endpoint address="" binding="basicHttpBinding" bindingConfiguration="NoneSecurity" contract="WcfServiceLibrary1.IService2">

  43. </endpoint>

  44. </service>

  45. </services>

  46. <behaviors>

  47. <serviceBehaviors>

  48. <behavior name="CalculatorServiceBehavior">

  49. <serviceTimeouts />

  50. <serviceMetadata httpGetEnabled="true"/>

  51. <serviceDebug includeExceptionDetailInFaults="true"/>

  52. <dataContractSerializer maxItemsInObjectGraph="2147483647"/>

  53. </behavior>

  54. </serviceBehaviors>

  55. </behaviors>

  56. </system.serviceModel>

  57. </configuration>


注意,配置文件中插入了两个service节点,分别对应两个接口。

以上服务端搭建完成。

 

客户端:

建立WinForm项目,分别引用两个服务,并命名为Service1、Service2:

 


 
  1. private void button1_Click(object sender, EventArgs e)

  2. {

  3. Service1.IService1 service1 = new Service1.Service1Client();

  4.  
  5. MessageBox.Show(service1.GetIService1());

  6.  
  7. service1 = null;

  8. }

  9.  
  10. private void button2_Click(object sender, EventArgs e)

  11. {

  12. Service2.IService2 service2 = new Service2.Service2Client();

  13.  
  14. MessageBox.Show(service2.GetIService2());

  15.  
  16. service2 = null;

  17. }


客户端配置文件在引用后自动生成

 


 
  1. <?xml version="1.0" encoding="utf-8" ?>

  2. <configuration>

  3. <system.serviceModel>

  4. <bindings>

  5. <basicHttpBinding>

  6. <binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"

  7. openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"

  8. allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

  9. maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"

  10. messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"

  11. useDefaultWebProxy="true">

  12. <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"

  13. maxBytesPerRead="4096" maxNameTableCharCount="16384" />

  14. <security mode="None">

  15. <transport clientCredentialType="None" proxyCredentialType="None"

  16. realm="" />

  17. <message clientCredentialType="UserName" algorithmSuite="Default" />

  18. </security>

  19. </binding>

  20. <binding name="BasicHttpBinding_IService2" closeTimeout="00:01:00"

  21. openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"

  22. allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

  23. maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"

  24. messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"

  25. useDefaultWebProxy="true">

  26. <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"

  27. maxBytesPerRead="4096" maxNameTableCharCount="16384" />

  28. <security mode="None">

  29. <transport clientCredentialType="None" proxyCredentialType="None"

  30. realm="" />

  31. <message clientCredentialType="UserName" algorithmSuite="Default" />

  32. </security>

  33. </binding>

  34. </basicHttpBinding>

  35. </bindings>

  36. <client>

  37. <endpoint address="http://127.0.0.1:8000/" binding="basicHttpBinding"

  38. bindingConfiguration="BasicHttpBinding_IService1" contract="Service1.IService1"

  39. name="BasicHttpBinding_IService1" />

  40. <endpoint address="http://127.0.0.1:8001/" binding="basicHttpBinding"

  41. bindingConfiguration="BasicHttpBinding_IService2" contract="Service2.IService2"

  42. name="BasicHttpBinding_IService2" />

  43. </client>

  44. </system.serviceModel>

  45. </configuration>


运行服务端及客户端,实现客户端调用两个接口。

此示例只是简单的实现两个接口的过程,实际上两个接口可以使用不同的协议通讯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值