基于.NET的WebService的实现和WCF的实现
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程序
4. 基于.NET的WebService的实现和WCF的实现
基于.NET的WebService的实现和WCF的实现的更多相关文章
- 基于soapUI构建WebService测试框架
基于soapUI构建WebService测试框架 http://www.docin.com/p-775523285.html
- 基于Jws的WebService项目
基于Jws的WebService项目 1.服务器端建立 1.1.创建接口 [java] view plaincopy @WebService public interface IWebServi ...
- 【转】构建基于CXF的WebService服务
构建基于CXF的WebService服务 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.C ...
- python发布及调用基于SOAP的webservice
现如今面向服务(SOA)的架构设计已经成为主流,把公用的服务打包成一个个webservice供各方调用是一种非常常用的做法,而应用最广泛的则是基于SOAP协议和wsdl的webservice.本文讲解 ...
- 基于JAX-WS的webService开发实例
最近因为工作原因接触到webService,所以记录下开发中碰到的问题,方便自己以后复习,顺便发扬一下开源精神.刚刚接触webServie如果有什么错误欢迎大家指正. 本地环境:myEclipse10 ...
- 基于PI的Webservice发布实例
[转自http://blog.csdn.net/yin_chuan_lang/article/details/6706816] 最近的项目中,接口较多,而Webservice技术是主要实现方式之一.下 ...
- Myeclipse8.5上基于JAX-WS开发WebService
1.JAX-WS介绍 JAX-WS规范是一组XML web services的JAVA API. 2.开发步骤 基于JAX-WS的WebService开发步骤如下: 2.1 新建一个Web Servi ...
- 使用sproxy.exe访问基于soap的webservice
使用vc访问基于soap的webservice有多种方法,其中有一种是使用atlsoap,关于这个可以搜索sproxy.exe文章,不在这介绍(主要是我的写作能力太差).我写这个日记主要是项记录访问w ...
- PHP基于SOAP实现webservice
简单对象访问协议(SOAP)是一种轻量的.简单的.基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息. SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( H ...
随机推荐
- 项目积累——SQL积累
select sum(njts)-sum(ysyts) from njsyqk where ygdh='888882' and ((yxbz is null) or (yxbz='1')) selec ...
- Redis附加功能之Redis流水线pipeline
流水线功能的目的:通过减少客户端与服务器之间的通信次数来提高程序的执行效率. 一.通信 在一般情况下, 用户每执行一个 Redis 命令,客户端与服务器都需要进行一次通信:客户端会将命令请求发送给服务 ...
- TextView里的文 html
一.[Android实例]实现TextView里的文字有不同颜色 转eoe:http://www.eoeandroid.com/thread-4496-1-1.html import android. ...
- rlwrap(在sqlplus下使用上下键)
一:安装readline OS的安装光盘里提供了readline包. # RHEL 4 [root@oracle11g ~]# rpm -Uvh readline* error: Failed dep ...
- IT综合学习网站收集
最近整理了一下曾经使用过的IT从入门到广泛的综合类基础学习网站,记录下来,以便初学者使用: 1.http://www.w3school.com.cn/ 中文版基础在线学习平台 2.http://ww ...
- ASPxTreeList控件去根节点的新增修改操作(写在onCommandColumnButtonInitialize()事件中)
treelist去掉根节点按钮效果图: //去掉父节点及子节点旁的新增.修改.删除操作(写在onCommandColumnButtonInitialize事件中) protected void Tre ...
- iOS 根据字符串来定位地址
- (void)viewDidLoad { [super viewDidLoad]; self.geocoder = [[CLGeocoder alloc]init]; // 设置地图可缩放 self ...
- VC与JavaScript交互(三) --- CWebPage类调用javascript函数(给js函数传参,并取得返回值)
①需要一个别人写好的类CWebPage,将其对于的两个文件WebPage.h和WebPage.cpp添加到工程中. ②添加WebBrowser控件,在视图/对话框类的头文件中#include &quo ...
- C# 最原始的tree 递归使用
; i < dr.Rows.Count; i++) { ) { n ...
- android studio首次运行出错
转载2015-10-24 16:28:15 标签:androidstudioandroidstudio无法启androidstudio1.4无法 Internal error. Please repo ...