精简版的VS如何vs2015怎么创建c项目WCF项目

如何创建一个 WCF 自托管的应用 - 技术翻译 - 开源中国社区
如何创建一个 WCF 自托管的应用
【已翻译100%】
英文原文:
推荐于 3年前 (共 3 段, 翻译完成于 07-08)
参与翻译&(1人)&:
这篇文章会向你展示怎么去创建一个WCF自托管应用。我将在VS2012中开发,与VS2010非常相近。我还将使用WPF,如果可以你还可以使用WF。希望这篇文章能让你们快速了解WCF自托管应用。
如果你想更加深入,了解WCF如何工作是一个比较有用的方面,同时在这个方面也有许多文章。但是对于这篇文章,这个不是必需的。
为了创建一个服务,你需要定义服务契约并且去继承它。这个契约是一个接口,这个接口列出了继承类需要继承的方法并且这些方法对于客户端都是可用的。
&翻译得不错哦!
在创建应用之前需要确保防火墙没有屏蔽这个应用,对于一个Demo来说,我们最好禁用它。或者开启需要使用到的端口(就像我使用的8888端口)。
首先需要创建一个"WcfSelfhostedService"的项目。
然后,添加&System.ServiceModel引用。
现在我们可以创建一个名为"IService.cs"的文件,这个文件需要包含一个契约。
using System.ServiceM
namespace WcfSelfhostedService
[ServiceContract]
public interface IService
[OperationContract]
String Hello(String name);
} 现在就应该创建一个名为 "&
Service.cs "的文件,然后继承我们之前定义的契约。
namespace WcfSelfhostedService
class Service : IService
public String Hello(string name)
return String.Format("Hello {0}", name);
} 为了启动这个服务,有一些配置是必须的,不过这些配置VS都帮你做好了。我们只需要将对服务的调用放到
MainWindow.xaml . 的后台文件中
using System.ServiceM
using System.ServiceModel.D
using System.W
namespace WcfSelfhostedService
/// &summary&
Interaction logic for MainWindow.xaml
/// &/summary&
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
var uri = new Uri("http://localhost:8888/WcfSelfhostedService");
var host = new ServiceHost(typeof (Service), uri);
//Enable realiable sessions
var wsHttpBinding = new WSHttpBinding
ReliableSession = {Enabled = true, Ordered = true}
//Disable security. Is's ok for now.
wsHttpBinding.Security.Mode = SecurityMode.N
host.AddServiceEndpoint(typeof (IService), wsHttpBinding, "service");
//Enable metadata publishing
var smb = new ServiceMetadataBehavior
HttpGetEnabled = true,
MetadataExporter = {PolicyVersion = PolicyVersion.Policy15}
//Generate policy information with the metadata that conforms to WS-Policy1.5
host.Description.Behaviors.Add(smb);
//Open host
host.Open();
} 通过这些代码,我们就可以去启动这个服务了。
该时候去创建客户端了,这时我们需要新建一个控制台项目。
我们需要添加一个Service Reference,右击References 然后选择&Add Service Reference
&翻译得不错哦!
查找我们之前创建的URI ( 比如:http://localhost:8888/WcfSelfhostedService)。如果没有来自防火墙的干扰,我们就可以看到这个服务。
在&Program.cs文件中,需要添加一些去验证服务是否可用的代码。
using WcfSelfhostedServiceClient.SelfhostedS
namespace WcfSelfhostedServiceClient
internal class Program
private static void Main(string[] args)
var client = new ServiceClient();
string response = client.Hello("World");
Console.WriteLine(response);
//Just to make you can see the response
Console.ReadLine();
} 启动控制台项目,我们就可以看到“Hello World”。就是那么简单!
源码下载:
&翻译得不错哦!
我们的翻译工作遵照 ,如果我们的工作有侵犯到您的权益,请及时联系我们
暂无网友评论您的位置: >
创建一个简单的Web API 项目
学习标签:
本文导读:ASP.NET Web API具有与ASP.NET MVC类似的编程方式,ASP.NET Web API不仅仅具有一个完全独立的消息处理管道,而且这个管道比为ASP.NET MVC设计的管道更为复杂,功能也更为强大。下面创建一个简单的Web API 项目
Visual Studio为我们提供了专门用于创建ASP.NET Web API应用的项目模板,借助于此项目模板提供的向导,我们可以&一键式&创建一个完整的ASP.NET Web API项目。在项目创建过程中,Visual Studio会自动为我们添加必要的程序集引用和配置,甚至会为我们自动生成相关的代码,总之一句话:这种通过向导生成的项目在被创建之后其本身就是一个可执行的应用。
一、下面通过VS2013、.NET 4.5.1创建一个Web API项目
1、解决方案下面新建项目
2、选择项目WEB API模板, 在最下方的MVC主要是默认会自带微软的API Helper, 使用MVC发布
3、安全选择
4、点击确定按钮,VS2013将生成一个简单的Web API项目
5、运行项目,启动项目之后, 点击界面上API按钮可以看到默认创建的API
6、新建一个Products API
(1)、添加ProductController
(2)、选择empty 控制器
(3)、在ProductController里中实现API
C# 代码 &&复制
[RoutePrefix(&api/products&)]
public class ProductController : ApiController
//获取产品分页API: api/products/product/getList
[HttpGet, Route(&product/getList&)]
public Page&Product& GetProductList()
throw new NotImplementedException();
//获取单个产品API: api/products/product/get?productId=产品ID
[HttpGet, Route(&product/get&)]
public Product GetProduct(Guid productId)
throw new NotImplementedException();
//产品新增API: api/products/product/add?productId=产品ID
[HttpPost, Route(&product/add&)]
public Guid AddProduct(Product product)
throw new NotImplementedException();
//产品新增API: api/products/product/add?productId=产品ID
[HttpPost, Route(&product/update&)]
public void UpdateProduct(Guid productId, Product product)
throw new NotImplementedException();
//产品删除API: api/products/product/delete?productId=产品ID
[HttpDelete, Route(&product/delete&)]
public void DeleteProduct(Guid productId)
throw new NotImplementedException();
二、ASP.NET Web API 特性
1、先进的 HTTP 编程模型&
使用新的强类型的 HTTP 对象模型直接操作 HTTP 请求和响应, 在 HTTP客户端使用相同的编程模型和 HTTP 管道;
2、支持路由
Web API 完整支持 ASP.NET 路由, 包括路由参数和约束。 此外, 到动作的映射支持约定, 从此将不再需要向类或者方法添加类似于 [HttpPost] 之类的属性;
3、内容协商
客户端与服务端可以一起决定 API 返回数据的格式。 默认支持 XML, JSON 以及 Form URL-Encoded 格式, 可以扩展添加自定义格式, 甚至可以替换掉默认的内容协商策略;
4、模型绑定与验证
模型绑定器可以轻易地从 HTTP 请求中提取数据并转换成在动作方法中使用的 .Net 对象;
Web API 支持过滤, 包括总所周知的 [Authorize] 过滤标记, 可以为 Action 添加并插入自定义过滤, 实现认证、异常处理等;
6、查询聚合
只要简单的返回 Iqueryable&T& , Web API 将会支持通过 OData 地址约定进行查询;
7、改进的 Http 细节可测试性
Web API 不是将 HTTP 细节设置到一个静态的 Context 对象上, 而是使用 HttpRequestMessage 和HttpResponseMessage 实例, 可以使用这些对象的泛型版本为这些 Http 类型添加自定义类型;
8、改进的依赖反转 (IoC) 支持
Web API 使用 MVC Dependency Resolver 实现的服务定位器模式在不同的场景下来获取实例;
9、基于代码的配置
Web API 单独使用代码完成配置, 从而保证了配置文件的整洁;
10、自托管 (Self-Host)&
Web API 除了可以托管在 IIS 中, 还可以托管在进程中,依旧可以使用路由以及其它的特性。
您可能感兴趣
一月好评排行榜VS2010中如何创建一个WCF - Leon zhang - 博客园
posts - 23, comments - 31, trackbacks - 0, articles - 0
转载:&&最近才真正接触WCF,实在惭愧,在网上和园子里找很多例子,但发现并没有VS2010创建最新的WCF项目示例,也是最简单的一种方式。做个记录,与新手共享。(本机VS2010为中文版)步骤:1. 新建项目-WCF-WCF服务应用程序,会有自带服务示例IService1.cs 和Service1.svc。目录结构如下:&然后选择该项目右健,点击生成(切记:项目一定要生成)。然后发布服务,将服务部署在IIS上(该示例以IIS作为宿主),方法和部署正常的网站程序完全一样。然后即可浏览该服务,要记住服务地址,下面会用到,例我的部署地址为:。但应该注意:IIS中选择添加应用程序,不要选择虚拟目录。效果:看到如上的页面,说明服务已部署成功。2. 创建客户端程序:新建项目-Windows-Windows窗体应用程序, 选中项目下“引用”点击鼠标右键,选择“添加服务引用”,弹出“添加服务引用”对话框,地址栏输入刚发布服务地址,我部署地址为:但应该注意:IIS中选择添加应用程序,不要选择虚拟目录。会自动找到该解决方案下所有的服务,此时找到刚刚建立的Service1.svc服务。选中服务后,点击确定。&项目中即生成如下服务ServiceRefrence1:&4. 在Windows窗体应用程序下,打开Form1窗体,添加一个按钮,在按钮事件里添加如下代码:&&&&&&&&& ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();&&&&&&&&&&string str =&client.GetData(100); //100:客户端传给服务端的值,str:服务端传给客户端的值&&&&&&&&& MessageBox.Show(str);5. 将Windows窗体应用程序作为解决方案的启动项目,然后F5运行,即可。至此OK,一个WCF示例完成。WCF服务即发布和运行,且可被客户端进行调用。我的VS2008的新建项目里没有“安装和部署项目”?-c/c++-电脑编程网我的VS2008的新建项目里没有“安装和部署项目”?作者:hsbhljl 和相关&&我的系统是WIN7,安装的是VS2008,所有功能都安装了。想学习怎么建安装项目的时候,杯具了,找不到“安装和部署项目”,截图如上。期待好心人帮忙看看什么问题!------回答---------------其他回答(5分)---------可能vs2008没装全?------其他回答(30分)---------
什么版本的VS2008哦?
------其他回答(3分)---------不在其它项目类型里语言选择C#,再看右边的一大框东西有没有------其他回答(2分)---------是啥版本的?express的?相关资料:|||||||我的VS2008的新建项目里没有“安装和部署项目”?来源网络,如有侵权请告知,即处理!编程Tags:                &                    创建一个简单的WCF程序
创建一个简单的WCF程序&[1]
下面创建一个简单的WCF,以便对WCF有个直观的了解
在这个例子中,将实现一个简单的计算服务(CalculatorService),提供加的运算。和传统的分布式通信框架一样,WCF本质上提供一个跨进程、跨机器以致跨网络的服务调用。在本例中,客户端和服务通过运行在相同的同一台机器上不同进程模拟,图1体现了客户端和服务端进程互相调用的关系。
图1 &计算服务应用运行环境
在这个例子中,采用了两种服务寄宿方式:
通过自我寄宿(Self-Hosting)的方式创建一个控制台应用作为服务的宿主(寄宿进程为Hosting.exe);
通过IIS寄宿方式将服务寄宿于IIS中(寄宿进程为IIS的工作进行W3wp.exe)。
客户端通过另一个控制台应用模拟(进程为Client.exe)
步骤一: 构建整个解决方案
通过VS 2010创建一个空白的解决方案,添加如下四个项目。项目的类型、承载的功能和相互引用关系如下,整个项目在VS下的结构如图2所示()。
Contracts:一个类库项目,定义服务契约(Service Contract),引用System.ServiceMode程序集(WCF框架的绝大部分实现和API定义在该程序集中);
Services:一个类库项目,提供对WCF服务的实现。定义在该项目中的所有WCF服务实现了定义在Contracts中相应的服务契约,所以Services具有对Contracts项目的引用;
Hosting:一个控制台(Console)应用,实现对定义在Services项目中的服务的寄宿,该项目须要同时引用Contracts和Services两个项目和System.ServiceMode程序集;
Client:一个控制台应用模拟服务的客户端,该项目引用System.ServiceMode程序集。
图2 计算服务在VS中的结构
步骤二:创建服务契约
WCF采用基于契约的交互方式实现了服务的自治,以及客户端和服务端之间的松耦合。WCF包含四种类型的契约:服务契约、数据契约、消息契约和错误契约,这里着重于服务契约。从功能上讲,服务契约抽象了服务提供的所有操作;而站在消息交换的角度来看,服务契约则定义了基于服务调用的消息交换过程中,请求消息和回复消息的结构,以及采用的消息交换模式。
1 using System.ServiceM
2 namespace WcfServices.Contracts
[ServiceContract]
public interface ICalculator
[OperationContract]
double Add(double x, double y);
步骤三:创建服务
服务实现了服务契约接口ICalculator
1 using WcfServices.C
2 namespace WcfServices.Services
public class CalculatorService:ICalculator
public double Add(double x, double y)
return x +
步骤四:通过自我寄宿的方式寄宿服务&
WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段。终结点由地址(Address)、绑定(Binding)和契约(Contract)三要素组成。由于三要素应为首字母分别为ABC,所以就有了易于记忆的公式:Endpoint = ABC
地址(Address):地址决定了服务的位置,解决了服务寻址的问题;
绑定(Binding):绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能(比如安全、可靠传输、事务等)对消息进行的相应处理。WCF中具有一系列的系统定义绑定,比如BasicHttpBinding、WsHttpBinding、NetTcpBinding等;
契约(Contract):契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。
2 using System.ServiceM
3 using System.ServiceModel.D
4 using WcfServices.C
5 using WcfServices.S
7 namespace WcfServices.Hosting
class Program
static void Main(string[] args)
* Create a host to provide service.
* ServiceType is HelloWorld
* BaseAddress is in localhost
using (ServiceHost host = new ServiceHost(typeof(CalculatorService), new Uri("http://localhost:8080/calculatorservice")))
* Add an serviceEndpoint to this host
* Implemented Contract is ICalculator
* Binding pattern is BasicHttpBinding
'SVC' is a relative address
host.AddServiceEndpoint(typeof(ICalculator), new BasicHttpBinding(), "SVC");
if (host.Description.Behaviors.Find&ServiceMetadataBehavior&() == null)
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://localhost:8080/calculatorservice");
host.Description.Behaviors.Add(behavior);
host.Opened += delegate
Console.WriteLine("CalculaorService have started, press any key to stop it!");
host.Open();
Console.Read();
WCF服务寄宿通过一个特殊的对象完成:ServiceHost。在上面的例子中,基于WCF服务的类型(typeof(CalculatorService))创建了ServieHost对象,并添加了一个终结点。具体的地址为,采用了WSHttpBinding,并指定了服务契约的类型ICalculator。
松耦合是SOA的一个基本的特征,WCF应用中客户端和服务端的松耦合体现在客户端只须要了解WCF服务基本的描述,而无须知道具体的实现细节,就可以实现正常的服务调用。
WCF服务的描述通过元数据(Metadata)的形式发布出来。WCF中元数据的发布通过一个特殊的服务行为ServiceMetadataBehavior实现。在上面提供的服务寄宿代码中,我们为创建的ServiceHost添加了ServiceMetadataBehavior,并采用了基于HTTP-GET的元数据获取方式,元数据的发布地址通过ServiceMetadataBehavior的HttpGetUrl指定。在调用ServiceHost的Open方法对服务成功寄宿后,也就是Hosting控制台程序正常运行后,如图3所示。
图3 运行寄宿wcf服务的控制台程序
在你的浏览器地址栏中,输入,效果图4所示:
图4 calculatorservice service运行正常
点击页面中的链接,出现WSDL格式的XML文件,如下代码:
&?xml version="1.0" encoding="utf-8" ?&
2 - &wsdl:definitions name="CalculatorService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://tempuri.org/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="/ws/2005/12/wsdl/contract" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"&
3 - &wsdl:types&
4 - &xsd:schema targetNamespace="http://tempuri.org/Imports"&
&xsd:import schemaLocation="http://localhost:8080/calculatorservice?xsd=xsd0" namespace="http://tempuri.org/" /&
&xsd:import schemaLocation="http://localhost:8080/calculatorservice?xsd=xsd1" namespace="/2003/10/Serialization/" /&
&/xsd:schema&
&/wsdl:types&
9 + &wsdl:message name="ICalculator_Add_InputMessage"&
&wsdl:part name="parameters" element="tns:Add" /&
&/wsdl:message&
12 - &wsdl:message name="ICalculator_Add_OutputMessage"&
&wsdl:part name="parameters" element="tns:AddResponse" /&
&/wsdl:message&
15 - &wsdl:portType name="ICalculator"&
16 - &wsdl:operation name="Add"&
&wsdl:input wsaw:Action="http://tempuri.org/ICalculator/Add" message="tns:ICalculator_Add_InputMessage" /&
&wsdl:output wsaw:Action="http://tempuri.org/ICalculator/AddResponse" message="tns:ICalculator_Add_OutputMessage" /&
&/wsdl:operation&
&/wsdl:portType&
21 - &wsdl:binding name="BasicHttpBinding_ICalculator" type="tns:ICalculator"&
&soap:binding transport="http://schemas.xmlsoap.org/soap/http" /&
23 - &wsdl:operation name="Add"&
&soap:operation soapAction="http://tempuri.org/ICalculator/Add" style="document" /&
25 - &wsdl:input&
&soap:body use="literal" /&
&/wsdl:input&
28 - &wsdl:output&
&soap:body use="literal" /&
&/wsdl:output&
&/wsdl:operation&
&/wsdl:binding&
33 - &wsdl:service name="CalculatorService"&
34 - &wsdl:port name="BasicHttpBinding_ICalculator" binding="tns:BasicHttpBinding_ICalculator"&
&soap:address location="http://localhost:8080/calculatorservice/SVC" /&
&/wsdl:port&
&/wsdl:service&
&/wsdl:definitions&
步骤五:创建客户端调用服务
服务被成功寄宿后,服务端便开始了服务调用请求的监听工作。此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据创建客户端程序进行服务的消费。在VS下,当我们添加服务引用的时候,VS在内部帮我们实现元数据的获取,并借助这些元数据通过代码生成工具(SvcUtil.exe)自动生成用于服务调用的服务代理相关的代码和相应的配置。
在运行服务寄宿程序(Hosting.exe)的情况下,右键点击Client项目,在弹出的上下文菜单中选择&添加服务引用(Add Service References)&,如图5所示的添加服务引用的对话会显示出来。在地址栏上键入服务元数据发布的源地址:,并指定一个命名空间,点击OK按钮,VS为为你生成一系列用于服务调用的代码和配置。
图5 添加服务引用
在一系列自动生成的类中,包含一个服务契约接口、一个服务代理对象和其他相关的类。被客户端直接用于服务调用的是服务代理类CalculatorClient,它继承字ClientBase&ICalculator&:
1 //------------------------------------------------------------------------------
2 // &auto-generated&
This code was generated by a tool.
Runtime Version:4.0.
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
8 // &/auto-generated&
9 //------------------------------------------------------------------------------
11 namespace WcfServices.Client.CalculatorService {
[piler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="CalculatorService.ICalculator")]
public interface ICalculator {
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICalculator/Add", ReplyAction="http://tempuri.org/ICalculator/AddResponse")]
double Add(double x, double y);
[piler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface ICalculatorChannel : WcfServices.Client.CalculatorService.ICalculator, System.ServiceModel.IClientChannel {
[System.Diagnostics.DebuggerStepThroughAttribute()]
[piler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class CalculatorClient : System.ServiceModel.ClientBase&WcfServices.Client.CalculatorService.ICalculator&, WcfServices.Client.CalculatorService.ICalculator {
public CalculatorClient() {
public CalculatorClient(string endpointConfigurationName) :
base(endpointConfigurationName) {
public CalculatorClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
public CalculatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
public CalculatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress) {
public double Add(double x, double y) {
return base.Channel.Add(x, y);
我们可以创建CalculatorServiceClient对象,执行相应方法调用服务操作。客户端进行服务调用的代码如下:
2 using WcfServices.Client.CalculatorS
3 namespace WcfServices.Client
class Program
static void Main(string[] args)
using (CalculatorClient proxy = new CalculatorClient())
Console.WriteLine("x + y = {2} when x = {0} and y = {1}", 1, 2, proxy.Add(1, 2));
Console.Read();
运行客户端后,结果如图6所示:
图6 客户端结果
[1] 我的WCF之旅(1):创建一个简单的WCF程序
[2] 一个WCF的HelloWorld程序
阅读(...) 评论()

我要回帖

更多关于 vs2015无法创建项目 的文章

 

随机推荐