重温WCF之一个服务实现多个契约(二)


 public class ServiceImp : IService1,IService2,IService3
{
public string SayHelloA()
{
return "你好,这是第一个服务协定。";
}

public string SayHelloB()
{
return "你好,这是第二个服务协定。";
}

public string SayHelloC()
{
return "你好,这是第三个服务协定。";
}
}

[ServiceContract]
public interface IService1
{
[OperationContract]
string SayHelloA();
}

[ServiceContract]
public interface IService2
{
[OperationContract]
string SayHelloB();
}

[ServiceContract]
public interface IService3
{
[OperationContract]
string SayHelloC();
}

使用代码的方式:


using (ServiceHost host = new ServiceHost(typeof(ServiceImp)))
{
host.AddServiceEndpoint(typeof (IService1), new WSHttpBinding(), "http://127.0.0.1:8888/service1");
host.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), "http://127.0.0.1:8888/service2");
host.AddServiceEndpoint(typeof(IService3), new WSHttpBinding(), "http://127.0.0.1:8888/service3");
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://127.0.0.1:8888/service"); //httpGetUrl客户端引用的地址
host.Description.Behaviors.Add(behavior);
host.Opened += delegate
{
MessageBox.Show("Service2已经启动");
};
host.Open();
}

使用配置文件的方式:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<!--httpGetUrl客户端引用的地址-->
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:8888/service"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WindowsFormsApplication2.ServiceImp" behaviorConfiguration="serviceBehavior">
<endpoint address="http://127.0.0.1:8888/service1" binding="wsHttpBinding" contract="WindowsFormsApplication2.IService1"></endpoint>
<endpoint address="http://127.0.0.1:8888/service2" binding="wsHttpBinding" contract="WindowsFormsApplication2.IService2"></endpoint>
<endpoint address="http://127.0.0.1:8888/service3" binding="wsHttpBinding" contract="WindowsFormsApplication2.IService3"></endpoint>
</service>
</services>
</system.serviceModel>
</configuration>


   using (ServiceHost host = new ServiceHost(typeof(ServiceImp)))
{
host.Opened += delegate
{
MessageBox.Show("Service2已经启动");
};
host.Open();
}

时间: 2024-10-18 02:59:35

重温WCF之一个服务实现多个契约(二)的相关文章

重温WCF之消息拦截与篡改(八)

我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借助其他工具来抓取数据包来查看.那,有没有办法让程序自己输出相应的SOAP信息呢? 要对SOAP消息进行拦截和修改,我们需要实现两个接口,它们都位于System.ServiceModel.Dispatcher (程序集System.ServiceModel).下面分别价绍. 接口一:IClientMe

重温WCF之消息契约(MessageContract)(六)

对于SOAP来说主要由两部分构成Header和Body,他们两个共同构成了SOAP的信封,通常来说Body保存具体的数据内容,Header保存一些上下文信息或关键信息.比如:在一些情况下,具有这样的要求:当序列化一个对象并生成消息的时候,希望将部分数据成员作为SOAP的报头,部分作为消息的主体.比如说,我们有一个服务操作采用流的方式进行文件的上载,除了以流的方式传输以二进制表示的文件内容外,还需要传输一个额外的基于文件属性的信息,比如文件格式.文件大小等.一般的做法是将传输文件内容的流作为SOA

重温WCF之数据契约(四)

1.使用数据协定可以灵活控制哪些成员应该被客户端识别. [DataContract] public class Employee { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } [DataMember] public string City { get; set; } } [ServiceContract] public interface IService { [

重温WCF之群聊天程序(十)

完成的效果图: 服务器端代码: using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System.ServiceModel.Description; using System.Text; using System.Threading.Tasks; namespace SendMessageHostConsoleApplication { [Servi

重温WCF之流与文件传输(七)

WCF开启流模式,主要是设置一个叫TransferMode的属性,所以,你看看哪些Binding的派生类有这个属性就可以了. TransferMode其实是一个举枚,看看它的几个有效值: Buffered:缓冲模式,说白了就是在内存中缓冲,一次调用就把整个消息读/写完,也就是我们最常用的方式,就是普通的操作协定的调用方式: StreamedRequest:只是在请求的时候使用流,说简单一点就是在传入方法的参数使用流,如 int MyMethod(System.IO.Stream stream);

重温WCF之会话Session(九)

转载地址:http://blog.csdn.net/tcjiaan/article/details/8281782 每个客户端在服务器上都有其的独立数据存储区,互不相干,就好像A和服务器在单独谈话一样,所以叫会话. 下面,我们写一个例子,看看在不支持会话的绑定上连续调用两个有关联的代码,会发生什么情况. [ServiceContract] public interface IService { [OperationContract(IsOneWay = true)] void SetValue(

跟我一起学WCF(11)——WCF中队列服务详解

一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务队列的方法来支持客户端和服务之间的离线工作,客户端将消息发送到一个队列中,再由服务对它们进行处理.下面让我们具体看看WCF中的队列服务. 二.WCF队列服务的优势 在介绍WCF队列服务之前,首先需要了解微软消息队列(MSMQ).MSMQ是在多个不同应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布在同一台机器

重温WCF之数单向通讯、双向通讯(五)

1.启用单向通讯的方法,不能有返回值(void可以),不能有out参数,只允许传入参数. [ServiceContract(Namespace = "MyNamespace")] public interface IService { [OperationContract(IsOneWay = true)] void DoTestWork(string message); } 2.双向通讯是有问必有答的(哪怕方法返回void,客户端也会收到一条空消息). [ServiceContrac

.NET Framework 4.6 and 4.5 &gt; 开发指南 &gt; 使用 WCF 的面向服务的应用程序 &gt; Windows Communication Foundation (WCF)

.NET Framework 4.6 and 4.5 > 开发指南 >  使用 WCF 的面向服务的应用程序 > Windows Communication Foundation (WCF) :https://msdn.microsoft.com/zh-cn/library/dd456779(v=vs.110).aspx 文档指南: https://msdn.microsoft.com/zh-cn/library/ms730846(v=vs.110).aspx 入门教程: https:/