小弟刚刚学习WCF,接触没有几天,做了个实例,下列描述中,可能有些理解错误,或者不适当的地方,请指正....实例中包含了四个项目,分别作如下介绍
Client:控制台应用,模拟服务的客户端
Contracts:类库项目,用于定义服务契约(Service Contract)
Hosting:控制台应用,实现对定义在Services项目中的服务寄宿
Services:类库项目,提供对WCF服务的实现目前这个项目,我是利用编码的方式创建的终结点,现在都可以正常运行,但是我想要利用config配置文件创建终结点,这样问题就来了,不会弄...问题暂时放着,先确定下我对实例的理解是否正确,如果有理解不正确的地方,希望大家给予指正,谢谢。首先:我要先开启服务端服务,那么就要依赖宿主,就要创建服务寄宿(创建进程供服务运行),可是一旦创建服务,就必须至少拥有一个终结点,只要终结点配置好了,那么就说明服务端服务已经运行,这样也就可以了...如果理解没错的话,就开始解决终结点配置方面的相关问题吧...利用编码创建终结点的源码:
namespace WCFTst.Hosting
{
class Program
{
static void Main(string[] args)
{
//利用编码方式进行终结点的添加和服务行为的定义
//创建服务寄宿 serviceHost
using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{
host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/aaa");
if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
{
//创建元数据,通过元数据形式发布wcf服务描述
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice/metadata");
host.Description.Behaviors.Add(behavior);
}
host.Opened += delegate
{
Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
};
//在调用ServiceHost的Open方法对服务成功寄宿后,
//我们可以通过该地址获取服务相关的元数据。
//在IE地址栏上键入http://127.0.0.1:9999/calculatorservice/metadata,你将会得到以WSDL形式体现的服务元数据
host.Open();
Console.Read();
}
}
}
}<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="aaa">
<endpoint address="http://127.0.0.1:8080/aaa" binding="wsHttpBinding" contract="WCFTst.Contracts.ICalculator"></endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
Client:控制台应用,模拟服务的客户端
Contracts:类库项目,用于定义服务契约(Service Contract)
Hosting:控制台应用,实现对定义在Services项目中的服务寄宿
Services:类库项目,提供对WCF服务的实现目前这个项目,我是利用编码的方式创建的终结点,现在都可以正常运行,但是我想要利用config配置文件创建终结点,这样问题就来了,不会弄...问题暂时放着,先确定下我对实例的理解是否正确,如果有理解不正确的地方,希望大家给予指正,谢谢。首先:我要先开启服务端服务,那么就要依赖宿主,就要创建服务寄宿(创建进程供服务运行),可是一旦创建服务,就必须至少拥有一个终结点,只要终结点配置好了,那么就说明服务端服务已经运行,这样也就可以了...如果理解没错的话,就开始解决终结点配置方面的相关问题吧...利用编码创建终结点的源码:
namespace WCFTst.Hosting
{
class Program
{
static void Main(string[] args)
{
//利用编码方式进行终结点的添加和服务行为的定义
//创建服务寄宿 serviceHost
using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{
host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/aaa");
if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
{
//创建元数据,通过元数据形式发布wcf服务描述
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice/metadata");
host.Description.Behaviors.Add(behavior);
}
host.Opened += delegate
{
Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
};
//在调用ServiceHost的Open方法对服务成功寄宿后,
//我们可以通过该地址获取服务相关的元数据。
//在IE地址栏上键入http://127.0.0.1:9999/calculatorservice/metadata,你将会得到以WSDL形式体现的服务元数据
host.Open();
Console.Read();
}
}
}
}<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="aaa">
<endpoint address="http://127.0.0.1:8080/aaa" binding="wsHttpBinding" contract="WCFTst.Contracts.ICalculator"></endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
解决方案 »
- 好不容易攒了二十分,问一个关于简单数据绑定的问题????????????????????
- 哪位能提供关于无刷的正确资料,万分感激!
- C#绘制实时折线图
- 关于win form制作安装文件的问题,桌面和开始-程序菜单中的快捷方式不能够运行程序(40)
- 新手的烦恼,请大虾帮忙,借此散分!
- 求一方法:通过存储过程得到 DataTable
- c#.net winform里form2 怎样能够修改form1中的label控件的text值呀?急用!!!!(在线等)
- 过了一个没有情人的情人节,又要过一个在外地的元宵节,郁闷!
- 第一次散分
- 请教各位c#高手,如何建立链表(不能用不安全代码(unsafe))?谢谢!
- 【新手求教】求用panel控件绘制扫雷界面的代码
- graphics.DrawString 对齐问题
这里的name不能乱填,必须填写CalculatorService类的全名(命名空间+类名)
还要是要放在创建服务的项目中,也就是CalculatorService所在的项目?
你的using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))过程,会自动检测当前程序对应的config文件里面有没有CalculatorService全名的service节点,找到就自动加载该节点配置。
嗯,搞定了,贴下代码,留用...<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:9999/CalculatorService/metadata" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="metadataBehavior" name="WCFTst.Services.CalculatorService">
<endpoint address="http://127.0.0.1:9999/CalculatorService"
binding="wsHttpBinding"
contract="WCFTst.Contracts.ICalculator" />
</service>
</services>
</system.serviceModel>
</configuration>
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="myBehavior" name="Services.TestService" >
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:5010/TestService"/>
</baseAddresses>
</host>
<endpoint address=""
binding="netTcpBinding"
contract="Services.ITestContract" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="myBehavior">
<serviceMetadata/>
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel></configuration>
nettcp方式