文章目录
一、构造函数
1、public WebServiceHost (Type serviceType, params Uri[] baseAddresses);
使用指定的服务类型和基址初始化 WebServiceHost 类的新实例。
参数
serviceType
服务类型。
baseAddresses
Uri[]
服务的基址。
示例
Uri[] baseAddresses = { new Uri("http://localhost/one"), new Uri("http://localhost/two") };
WebServiceHost host = new WebServiceHost(typeof(CalcService), baseAddresses);
2、public WebServiceHost (object singletonInstance, params Uri[] baseAddresses);
使用指定的单一服务器实例和基址初始化 WebServiceHost 类的新实例。
参数
singletonInstance
要用作单一实例的服务实例。
baseAddresses
Uri[]
服务的基址。
示例
Uri[] baseAddresses = { new Uri("http://localhost/one"), new Uri("http://localhost/two") };
object mySingleton = GetObject();
WebServiceHost host = new WebServiceHost(mySingleton, baseAddresses);
二、示例
下面的示例演示如何使用 WebServiceHost 类来承载利用 WCF REST 编程模型的服务。
[ServiceContract]
public interface ICalculator
{
[OperationContract]
[WebInvoke(UriTemplate = "add?x={x}&y={y}")]
long Add(long x, long y);
[OperationContract]
[WebInvoke(UriTemplate = "sub?x={x}&y={y}")]
long Subtract(long x, long y);
[OperationContract]
[WebInvoke(UriTemplate = "mult?x={x}&y={y}")]
long Multiply(long x, long y);
[OperationContract]
[WebInvoke(UriTemplate = "div?x={x}&y={y}")]
long Divide(long x, long y);
[OperationContract]
[WebGet(UriTemplate = "hello?name={name}")]
string SayHello(string name);
}
public class CalcService : ICalculator
{
public long Add(long x, long y)
{
return x + y;
}
public long Subtract(long x, long y)
{
return x - y;
}
public long Multiply(long x, long y)
{
return x * y;
}
public long Divide(long x, long y)
{
return x / y;
}
public string SayHello(string name)
{
return "Hello " + name;
}
}
class Program
{
static void Main(string[] args)
{
Uri baseAddress = new Uri("http://localhost:8000/");
WebServiceHost svcHost = new WebServiceHost(typeof(CalcService), baseAddress);
try
{
svcHost.Open();
Console.WriteLine("Service is running");
Console.WriteLine("Press enter to quit...");
Console.ReadLine();
svcHost.Close();
}
catch (CommunicationException cex)
{
Console.WriteLine("An exception occurred: {0}", cex.Message);
svcHost.Abort();
}
}
}
[ServiceContract]
public interface IHomeService
{
[OperationContract]
[WebGet(UriTemplate = "Get/{id}", RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)]
string Get(string id);
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Add", RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)]
string Add(string stu);
}
public class HomeService : IHomeService
{
public string Get(string id)
{
return "Get " + id;
}
public string Add(string id)
{
return "Add " + id;
}
}
public class WebApi
{
private static WebServiceHost _host;
/// <summary>
/// 开启服务
/// </summary>
/// <param name="url">监听路径(http://127.0.0.1:3721/abc)</param>
public static void Open(string url)
{
if (_host==null)
{
Uri baseAddress = new Uri(url);
_host = new WebServiceHost(typeof(HomeService), baseAddress);
_host.Open();
}
}
}
注释
RequestFormat规定客户端必须是什么数据格式请求的(JSon或者XML),不设置默认为XML
ResponseFormat规定服务端返回给客户端是以是什么数据格返回的(JSon或者XML)