创建基本WCF 服务时,第三项任务是承载和运行先前实现的WCF服务.此过程包含以下步骤:
1、为服务创建基址。
2、为服务创建服务主机。
3、启用元数据交换。
4、打开服务主机。
下面就详细说明通过上述四个步骤把我们的WCF服务运行起来。
(1)为服务配置基址
为服务的基址创建Uri实例。此URI 指定HTTP协议、本地计算机、端口号 8000.
Uri baseAddress = new Uri("
[url]http://localhost:8000/[/url]ServiceModelSamples/Service");
(2) 承载服务
1、创建一个新的
ServiceHost 实例以承载服务。必须指定实现服务协定和基址的类型。 对于此示例,我们将基址指定为
[url]http://localhost:8000/ServiceModelSamples/Services[/url],并将
CalculatorService 指定为实现服务协定的类型。
ServiceHost selfHost =
new ServiceHost(typeof(CalculatorService), baseAddress);
2、添加一个
try-
catch 语句,并在接下来的三个步骤中将下述代码添加到 try 块中。
3、添加公开服务的终结点。为此,必须指定终结点公开的协议、绑定和终结点的地址。 对于此示例,将 ICalculator 指定为协定,将 WSHttpBinding 指定为绑定,并将 CalculatorService 指定为地址。 在这里请注意,我们指定的是相对地址。 终结点的完整地址是基址和终结点地址的组合。 在此例中,完整地址是
[url]http://localhost:8000/ServiceModelSamples/Services/CalculatorService[/url]。
selfHost.AddServiceEndpoint( typeof(ICalculator),
new WSHttpBinding(),
"CalculatorService");
4、启用元数据交换。为此,必须添加服务元数据行为。 首先创建一个 ServiceMetadataBehavior 实例,将 HttpGetEnabled 属性设置为 true,然后为服务添加新行为。
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
5、打开
ServiceHost 并等待传入消息。 用户按 Enter 键时,关闭
ServiceHost。
selfHost.Open();
Console.WriteLine( "The service is ready.");
Console.WriteLine( "Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
selfHost.Close();
Console.WriteLine( "The service is ready.");
Console.WriteLine( "Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
selfHost.Close();
完整代码如下:
class Program
{
static void Main( string[] args)
{
Uri baseAddress = new Uri( "http://localhost:8000/ServiceModelSamples/Service");
ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
{
static void Main( string[] args)
{
Uri baseAddress = new Uri( "http://localhost:8000/ServiceModelSamples/Service");
ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
try
{
selfHost.AddServiceEndpoint( typeof(ICalculator),
new WSHttpBinding(),
"CalculatorService");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
selfHost.Open();
Console.WriteLine( "The service is ready.");
Console.WriteLine( "Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
selfHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine( "An CommunicationException occurred: {0}", ce.Message);
selfHost.Abort();
}
}
catch (CommunicationException ce)
{
Console.WriteLine( "An CommunicationException occurred: {0}", ce.Message);
selfHost.Abort();
}
catch (Exception ex)
{
Console.WriteLine(
"An exception occurred: {0}", ex.Message);
selfHost.Abort();
selfHost.Abort();
}
}
}
}
}
若要运行服务,请启动控制台应用程序。启动服务后,请导航至该服务的调试页
[url]http://localhost:8000/ServiceModelSamples/Services[/url],验证该服务是否正在运行。(如果服务在运行,则会显示如附件中的[正在运行.jpg].
至此已经完成承载和运行基本的WCF服务,服务运行后,下一步是创建一个客户端以访问该服务。 (详情请见下一篇《构建高性能分布式搜索引擎(Wcf-示例篇)五之创建WCF服务客户端》.
如果有需要可以下载附件示例项目作参考!
此方法为代码配置服务方式,如果有需要通过配置文件配置服务的朋友,请留下Email,我会把示例发到你的Email中.
|
---|
|
深圳E搜科技(搜索引擎技术钻研者!)
QQ群:15911745
QQ:448114915;934724029
Mobile:13168078506;13713628016
Email:pc2004lcq@126.com;jackbison@163.com
QQ群:15911745
QQ:448114915;934724029
Mobile:13168078506;13713628016
Email:pc2004lcq@126.com;jackbison@163.com
转载于:https://blog.51cto.com/desertwolf/133707