1.新建一个MVC web项目。

2.点击项目,【右键】→【添加】→【新建项】

3.点击【Web】→【Web服务】

4.恭喜,Web Service已经新建成功,里面的方法就可以参考着根据自己的需要进行修改了,是不是很简单。

5.Web Serice建成之后当然是开始调用了。在【引用】上【右键】,添加【服务引用】

6.开始引用。

7.恭喜服务已经引用成功。

再看配置文件,会多出一些代码,这些都是自动生成的,可以看看理解理解。

8.开始在程序中调用方法了

9.到此为止Web Service的建立到调用已经全部完成。

10.新建WCF与Web Service基本上是一样的,下面直图解不在介绍。

点击项目,【右键】→【添加】→【新建项】→【Web】→【WCF服务】

11.WCF建成之后当然是开始调用了。在【引用】上【右键】,添加【服务引用】,以后过程即使一模一样的了。

12.WCF和Web Service已经建立成功,那么如何供外部访问呢,当时是发布了,发布在IIS就可以,和发布网站是一样的。

WCF控制台应用程序例子

上面这是个简单的架构图。Iservice大家都有的功能的接口(契约),IUserService针对不同的类定义不同的接口,

AbstractService实现IService的公共方法,Uservice实现自己的方法,也可以重写集成的方法。

下面是分层,Web层,大家可以当做不存在,哈哈。

下面是IService层

using System;
using System.Collections.Generic;
using System.ServiceModel; namespace IServiceClassLibrary
{
[ServiceContract]
public interface IService<TModel> : IDisposable where TModel : new()
{
[OperationContract]
string Add(TModel tModel); [OperationContract]
string Delete(int id); [OperationContract]
string Edit(TModel tModel); [OperationContract]
TModel GetModel(int id); [OperationContract]
IEnumerable<TModel> GetAll();
}
}
using System;
using System.Runtime.Serialization; namespace IServiceClassLibrary
{
[DataContract]
public class UserData
{
[DataMember]
public int UserID { get; set; } [DataMember]
public string UserName { get; set; } [DataMember]
public string Password { get; set; } [DataMember]
public string Discribe { get; set; } [DataMember]
public DateTime SubmitTime { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ServiceModel; namespace IServiceClassLibrary
{
[ServiceContract]
public interface IUserService : IService<UserData>
{
[OperationContract]
IDictionary<int, string> GetUserDict();
}
}

下面是Service层

using IServiceClassLibrary;
using System;
using System.Collections.Generic; namespace ServiceClassLibrary
{
public abstract class AbstractService<TModel> : IService<TModel> where TModel : new()
{
public virtual string Add(TModel tModel)
{
//throw new NotImplementedException();
return "Add";
} public virtual string Delete(int id)
{
//throw new NotImplementedException();
return "Delete";
} public virtual string Edit(TModel tModel)
{
//throw new NotImplementedException();
return "Edit";
} public virtual TModel GetModel(int id)
{
TModel tModel = new TModel();
return tModel;
} public virtual IEnumerable<TModel> GetAll()
{
IList<TModel> tModels = new List<TModel>();
return tModels;
} public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
} protected virtual void Dispose(bool dispose)
{
if (dispose)
{
//CleanUp managed objects by calling thier
}
}
}
}
using IServiceClassLibrary;
using System.Collections.Generic; namespace ServiceClassLibrary
{
public class UserService : AbstractService<UserData>, IUserService
{
public IDictionary<int, string> GetUserDict()
{
IDictionary<int, string> keyValue = new Dictionary<int, string>();
keyValue.Add(, "test");
return keyValue;
} protected override void Dispose(bool dispose)
{
if (dispose)
{
//CleanUp managed objects by calling thier
}
}
}
}

下面是Server层,这层需要配置了,【新建】→【控制台应用程序】建好之后,【添加】→【新建项】→【WCF 服务】,建号之后,生成的两个文件可以删去了,

查看配置信息,对配置进行修改就可以了,懒人模式,高效准确。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="ServiceClassLibrary.UserService">
<endpoint address="" binding="basicHttpBinding" contract="IServiceClassLibrary.IUserService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
using IServiceClassLibrary;
using ServiceClassLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks; namespace WCFServer
{
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(UserService)))
{
host.AddServiceEndpoint(typeof(IUserService),
new BasicHttpBinding(),
new Uri("http://localhost:8733/ServiceClassLibrary/UserService/"));
if (host.State != CommunicationState.Opening)
{
host.Open();
}
Console.WriteLine("服务已经启动!");
Console.ReadLine();
}
}
}
}

下面是客服端

using IServiceClassLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks; namespace WCFClient
{
class Program
{
static void Main(string[] args)
{
EndpointAddress ea = new EndpointAddress("http://localhost:8733/ServiceClassLibrary/UserService/");
IUserService proxy = ChannelFactory<IUserService>.CreateChannel(new BasicHttpBinding(), ea);
Console.WriteLine(proxy.Delete());
Console.WriteLine(proxy.GetUserDict().First());
Console.ReadLine();
}
}
}

OK,WCF程序已经建立完成,先启动Server,再启动Client,程序正常运行。

如果遇到下面的问题,请以管理员身份运行就可以了。

其他的WCF文章

1. WCF入门

2. 我的第一个WCF程序

3. Web Service 和WCF的比较

4. 基于.NET的WebService的实现和WCF的实现

基于.NET的WebService的实现和WCF的实现的更多相关文章

  1. 基于soapUI构建WebService测试框架

    基于soapUI构建WebService测试框架 http://www.docin.com/p-775523285.html

  2. 基于Jws的WebService项目

    基于Jws的WebService项目   1.服务器端建立 1.1.创建接口 [java] view plaincopy @WebService  public interface IWebServi ...

  3. 【转】构建基于CXF的WebService服务

    构建基于CXF的WebService服务 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.C ...

  4. python发布及调用基于SOAP的webservice

    现如今面向服务(SOA)的架构设计已经成为主流,把公用的服务打包成一个个webservice供各方调用是一种非常常用的做法,而应用最广泛的则是基于SOAP协议和wsdl的webservice.本文讲解 ...

  5. 基于JAX-WS的webService开发实例

    最近因为工作原因接触到webService,所以记录下开发中碰到的问题,方便自己以后复习,顺便发扬一下开源精神.刚刚接触webServie如果有什么错误欢迎大家指正. 本地环境:myEclipse10 ...

  6. 基于PI的Webservice发布实例

    [转自http://blog.csdn.net/yin_chuan_lang/article/details/6706816] 最近的项目中,接口较多,而Webservice技术是主要实现方式之一.下 ...

  7. Myeclipse8.5上基于JAX-WS开发WebService

    1.JAX-WS介绍 JAX-WS规范是一组XML web services的JAVA API. 2.开发步骤 基于JAX-WS的WebService开发步骤如下: 2.1 新建一个Web Servi ...

  8. 使用sproxy.exe访问基于soap的webservice

    使用vc访问基于soap的webservice有多种方法,其中有一种是使用atlsoap,关于这个可以搜索sproxy.exe文章,不在这介绍(主要是我的写作能力太差).我写这个日记主要是项记录访问w ...

  9. PHP基于SOAP实现webservice

    简单对象访问协议(SOAP)是一种轻量的.简单的.基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息. SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( H ...

随机推荐

  1. nginx 状态码整理

    状态代码    状态信息     含义 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新)101 Switching Protocols 服务器将遵从 ...

  2. 使用eclipse集成开发环境开发第一个嵌入式Linux驱动

    转载学习 http://blog.csdn.net/cp1300/article/details/8266806

  3. getdata

    public partial class GetData : System.Web.UI.Page { protected void Page_Load(object sender, EventArg ...

  4. Centos安装软件小结-20160325

    三种安装包 bin包 rpm包 源码包 1.bin包 1.先赋予权限: chmod 777 *.bin 2.开始安装: ./.bin 2.rpm包(以jdk为例)\ yum search jdk\ y ...

  5. 通过WebHandler给图片添加水印

    图片生成webhandler水印,主要把水印的信息和位置post到webhandler去处理,返回后再div上显示 前台传递水印的信息和位置: /***********提取DIV属性********* ...

  6. MFC学习 修改窗口样式

    1. 在PreCreateWindow中可用CREATESTRUCT cs, cs.lpszName修改窗口标题, cs.lpszClass = AfxRegisterWndClass 修改图标与样式 ...

  7. struts2下实现的json传递list,object。

    必须的jar: java bean: package upload.progress.action; public class music { private String name; private ...

  8. IEF could not decode Chinese character in IE history well

    My friend is working on some case, and she looks not in the mood. I ask her what's going on. She wan ...

  9. 样式重置 取消input默认样式

    body, h1, h2, h3, h4, h5, h6, hr, p,blockquote, dl, dt, dd, ul, ol, li,pre, form, fieldset, legend, ...

  10. jquery resize事件增强版

    /* * jQuery resize event - v1.1 - 3/14/2010 * http://benalman.com/projects/jquery-resize-plugin/ * * ...