当前位置:首页 » 城管服务 » wcf服务

wcf服务

发布时间: 2020-12-18 16:11:21

㈠ Web Service和WCF的到底有什么区别

Web Service是早期的技术实现了,也是soap的东西,采用的主要是协议,假如是在C#上开发的话,需要寄宿在IIS上来实现。

WCF的话是相对较新的技术,里面的basichttpbinding可以跟以前的ws进行通信,并且集成了大部分的通信协议(几种http协议的实现以及net.Tcp实现、msmq、命名管道等实现),另外寄宿的宿主可以是命令行控制台、IIS、桌面程序等。

差别的话,感觉有这以下几点[针对C#来说的]。

1. ws的话,编程模型没有wcf的那么好,具体的实现差别建议网络下,个人觉得wcf比较好。wcf可以用契约的接口方式来进行实现,而ws的话主要是通过继承WebService的类来实现的,方法上添加WebMethod特性,WCF的话是通过服务契约来声明(可以是接口也可以是类对象)

2. ws的话通用性比较强,跟java等ws也可以进行互相通信,然后假如是wcf发布的服务,除了basicHttpBinding这种绑定之外,其余的几种绑定基本上不能作为互相通信。例如命名管道跟net.Tcp都是,值得说的是这里的net.Tcp跟原生的tcp是不一样的,内部实现上参考tcp的可靠连接机制进行了应用层的一套实现。

3. 另外一点就是服务引用跟web引用上的,这个严格来说不能属于两者的区别,只是.net版本的区别,主要是针对客户端对服务端发布好的服务进行的引用,服务引用生成的时候,会在配置文件上存在一份配置项,可以进行ABC终结点的配置,假如是web引用的话,会在setting中添加上一个硬编码的地址。建议用服务引用。

4. 还有一个就是客户端调用服务端开发的时候,webservice的话,基本上只能通过服务端发布的地址来进行引用[应用的方式可以参考点3],或者通过服务端提供的wsdl文件来进行引用(该种方式一般比较少,因为需要提供文件,而不是通过公开的方式来进行接口的提供,无法应对服务变更后发布问题,但是确实有这个情况的存在)。而wcf的话,还存在可以通过提供契约文件(就是声明了ServiceContract的那个接口文件)来进行服务的调用。

5. 在接口层面的话,凡是IList<class T>以及IDictionary<class T>这一类的泛型实现都会在进行服务引用的时候,都会转换为数组的,例如void F(IList<int>)会在引用后成为void F(int[])这种方式,而才用点4提供的契约文件的话就能保持方法的原始声明。

个人建议的话,假如是新开发的系统基本上都才用wcf比较好,一个是接口的思想,一个是假如需要转换为其他协议的话可以比较方便,只需要通过配置文件修改下就可以[当前前提是没有用到特定协议的特定属性,例如服务回调,有些协议是不支持双向通信的]。而且也需要考虑发布的服务是否需要公开给别的语言进行通信。

㈡ WCF 服务库 与 WCF 服务应用程序 有何区别

VS里的wcf服务应用程序其实就是能够发布服务的asp.net web,这里的web site其实是wcf 发布的服务的宿主内程序,当然,这个宿主程序不一定是web的,容也可是windows application的,也就是说wcf的服务可以在IIS上或者windows server上发布。

wcf是一个发布供远程跨平台调用的服务的feature,可以通过http, tcp, 消息队列等方式发布供远程跨平台调用访问的service。

你说的这个是对的,其实就是在web site上发布添加WCF Service或者AJAX-enabled WCF Service文件,发布供远程调用的service, 这个web project是wcf 服务的宿主,要启动你的这个web项目,才能远程访问到发布的wcf服务 。

㈢ WCF和WebService的区别,有什么优势

【1】Web Service:严格来说是行业标准,也就是 Service 规范,也称作WS-*规范,既不是框架,也不是技术。它有一套完成的规范体系标准,而且在持续不断的更新完善中。
它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。WSDL来实现服务接口相关的描述。此外Web services 可以注册到UDDI中心.供其客户查找使用。
后来微软做了ASP.NET Web Service的安全,性能,数据加密、解密,托管宿主等多方面的扩展,称为WSE系列,这个是过度产品,最高到WSE3.0.后来就是WCF时代。
【2】ASP.NET Web Service:微软提供了Web服务的开发框架,属于ASP.NET Framework的一部分,但是支持早起的WS规范。比如SOAP1.1。
【3】WCF:WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准也不是规范。
【4】WCF 能够创建兼容 Web 服务的服务,也就是说可以创建能够与Web 服务互联互通的服务,他们两个并不能用简单包含或者等同关系来表述。WCF 是一套框架,用来创建各种服务。其中包括创建 Web服务(采用 basicHttpBinding绑定的服务就是一个Web 服务)。

㈣ 通过C#代码调用WCF服务中的一个方法。不依赖配置文件等。求完整代码!!

那就是动态调用了,具体内参容见http://blog.csdn.net/caikeyter/article/details/7940904

㈤ 怎么判断wcf服务是否存在

大多数,如果不是所有的异常可以看出,在WCF轨迹(配置轨迹)和微量最好使用服务轨迹查看器查看。 这不是你应该已经跑了一整天在生产,但它有助于排除故障反正。 此外,请注意,oneways可能不会作为一个真正运行的逗射后不理地视SessionMode如果您有您的服务配置为SessionMode.Allowed甚至SessionMode.Required,该单向操作将运行 CodeGo.net,如果它不是单向的所有(这个可以观察oneways超过坦率地说,不过,我不知道这是否改变了异常,你可以得到的类型,或者当你让他们,但是,在任何情况下,你应该得到一个异常,如果该请求不能送的。AFAIK,该单向逗结束地时,enqued在服务器端,所以有地方(WCF相关的)异常在那之前(序列化/反序列化记)。 那么,这样的相关异常见过最好的(甚至是IErrorHandler接口并没有让他们都因时,它被称为在请求/响应流量的事实)使用轨迹/ traceviewer。
2. 如何处理故障的官方是在这里: 处理异常和 故障 了解状态 变化 与主网页是在信道模型概述 有一个很好的状态示出的事情是如何发生的:
3. 异常情况将发生故障的代理。你不能AFAIK做很多有关:不异常;-P 我有点惊讶的是单向还是个问题,但对于吞咽属升,有学分: 是你扔的故障看或异常看它很重要(而且应该是逗错误地) 作为一个hacker,你可以启用调试-但是请关闭此服务! 你在逗使用地的服务对象看我刚刚在博客上这个确切的主题...基本上,你的逗使用地可吞异常。 3个选项: 唐的逗使用地 子类的代理和重写的Dispose() 把它包,按照该博客
4. 通常情况下,WCF服务承载在ServiceHost中,如果WCF的服务失败,那么唯一的选择就是killWCF服务,并开始一个新的。 在ServiceHost有一个事件触发器逗断块地的时候,WCF服务失败时被激活:
ServiceHost host = new ServiceHost(new Service.MyService());
host.Faulted += new EventHandler(host_faulted);
host.Open();
这是可能得到异常的故障,但它需要多一点的工作:
public class ErrorHandler : IErrorHandler
{
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
}
public bool HandleError(Exception error)
{
Console.WriteLine("exception");
return false;
}
}
public class ErrorServiceBehavior : IServiceBehavior
{
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
ErrorHandler handler = new ErrorHandler();
foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
{
dispatcher.ErrorHandlers.Add(handler);
}
}
}
ServiceHost host = new ServiceHost(new Service.MyService());
host.Faulted += new EventHandler(host_faulted);
host.Description.Behaviors.Add(new ErrorServiceBehavior());
host.Open();
积分
5. 大约2)... 诀窍在于,你逗使用地,应始终在抛出异常的代理调用Abort()。文章WCF疑难杂症解释这一切。 服务类的文章,它包装服务调用者的启发。这是从我的项目的示例代码:
ServiceHelper<CodeListServiceClient, CodeListService.CodeListService>.Use(
proxy => seasonCodeBindingSource.DataSource = proxy.GetSeasonCodes(brandID);
);
这是ServiceHelper的代码,从文章略加修改。到目前为止,它已经真的很好。
using System;
using System.ServiceModel;
namespace Sportina.EnterpriseSystem.Client.Framework.Helpers
{
public delegate void UseServiceDelegate<TServiceProxy>(TServiceProxy proxy);
public static class ServiceHelper<TServiceClient, TServiceInterface> where TServiceClient : ClientBase<TServiceInterface>, new() where TServiceInterface : class
{
public static void Use(UseServiceDelegate<TServiceClient> codeBlock)
{
TServiceClient proxy = null;
bool success = false;
try
{
proxy = new TServiceClient();
codeBlock(proxy);
proxy.Close();
success = true;
}
catch (Exception ex)
{
Common.Logger.Log.Fatal("Service error: " + ex);
throw;
}
finally
{
if (!success && proxy != null)
proxy.Abort();
}
}
}
}

6. 我有一个问题,即通道仍然处于故障状态的异常之后。这将服务于任何后续连接被渲染。 从故障状态恢复服务的修复是处理通道发生故障的事件:
channelFactory = new ChannelFactory<IService>(endpoint);
channelFactory.Faulted += OnChannelFaulted;
var channel = channelFactory.CreateChannel();
然后定义OnChannelFaulted:
void OnChannelFaulted(object sender, EventArgs e)
{
channelFactory.Abort();
}

㈥ 在Win7下如何发布Wcf服务

发布wcf服务首先要安装IIS服务,在win7下找个服务也特别的恶心 【开始】-【控制面板】-【程序】-【打开专或关闭属Windows功能】-【Internet信息服务】勾选上web管理工具,万维网服务,几分钟以后,IIS7就安装在你的OS上了。

㈦ Web Service和WCF的到底有什么区别

Web Service是早期的技术实现了,也是soap的东西,采用的主要是http协议,假如是在C#上开发的话,需要寄宿在IIS上来实现。

WCF的话是相对较新的技术,里面的basichttpbinding可以跟以前的ws进行通信,并且集成了大部分的通信协议(几种http协议的实现以及net.Tcp实现、msmq、命名管道等实现),另外寄宿的宿主可以是命令行控制台、IIS、桌面程序等。

差别的话,感觉有这以下几点[针对C#来说的]。

  1. ws的话,编程模型没有wcf的那么好,具体的实现差别建议网络下,个人觉得wcf比较好。wcf可以用契约的接口方式来进行实现,而ws的话主要是通过继承WebService的类来实现的,方法上添加WebMethod特性,WCF的话是通过服务契约来声明(可以是接口也可以是类对象)

  2. ws的话通用性比较强,跟java等ws也可以进行互相通信,然后假如是wcf发布的服务,除了basicHttpBinding这种绑定之外,其余的几种绑定基本上不能作为互相通信。例如命名管道跟net.Tcp都是,值得说的是这里的net.Tcp跟原生的tcp是不一样的,内部实现上参考tcp的可靠连接机制进行了应用层的一套实现。

  3. 另外一点就是服务引用跟web引用上的,这个严格来说不能属于两者的区别,只是.net版本的区别,主要是针对客户端对服务端发布好的服务进行的引用,服务引用生成的时候,会在配置文件上存在一份配置项,可以进行ABC终结点的配置,假如是web引用的话,会在setting中添加上一个硬编码的地址。建议用服务引用。

  4. 还有一个就是客户端调用服务端开发的时候,webservice的话,基本上只能通过服务端发布的地址来进行引用[应用的方式可以参考点3],或者通过服务端提供的wsdl文件来进行引用(该种方式一般比较少,因为需要提供文件,而不是通过公开的方式来进行接口的提供,无法应对服务变更后发布问题,但是确实有这个情况的存在)。而wcf的话,还存在可以通过提供契约文件(就是声明了ServiceContract的那个接口文件)来进行服务的调用。

  5. 在接口层面的话,凡是IList<class T>以及IDictionary<class T>这一类的泛型实现都会在进行服务引用的时候,都会转换为数组的,例如void F(IList<int>)会在引用后成为void F(int[])这种方式,而才用点4提供的契约文件的话就能保持方法的原始声明。

个人建议的话,假如是新开发的系统基本上都才用wcf比较好,一个是接口的思想,一个是假如需要转换为其他协议的话可以比较方便,只需要通过配置文件修改下就可以[当前前提是没有用到特定协议的特定属性,例如服务回调,有些协议是不支持双向通信的]。而且也需要考虑发布的服务是否需要公开给别的语言进行通信。


另外楼上说的性能在下降的话,我大概说明下:

基本上针对应用的开发都是基于socket的开发,传统的socket开发的话,是需要自己去实现整个通信框架的,包括多线程处理,IOCP等的实现[基本上.net的异步通信模型在内部实现都会绑定好,IOCP是一个异步模型,自行网络],二进制流的编码处理[网络传输都是通过二进制的,例如utf8到二进制的转换],tcp无边界消息的处理[udp的话没有这个,但是包体的大小也是有限制],通信协议的约定处理[例如ws跟wcf是采用soap这种,各种ws的约定,例如多少个字节表示数据流的长度、数据的检验,还是数据加密位,也包括数据的位移处理],数据上抛模型跟数据回复模型[接受到数据后是需要上抛给业务层去进行处理的,然后也需要回复给客户端,不过也不一定是这样,看需求],还有各种针对性的处理,例如客户端socket的保存[有可能对长期不适用的套接字要进行自动断开的业务]。类似wcf这种东西的话,还有序列化跟反序列化的情况[序列化跟反序列化是性能开销比较大的,例如序列化是通过反射来实现的,反射又是跟程序集的元数据有关的,属于运行时行为],假如是自己实现tcp通信模型,就不一定会有序列化跟反序列化的通信模型了,而且wcf为了让通信跟本地调用那样以及标准的方面,字节流都是比较大的,这里也会增加通信的带宽【好比自定义的协议4个字节的数据包长度+1个字节的加密压缩位+N个数据包位+X个字节的检验位,这种的话实际用到的字节就比较少了,因为在数据包里面,可以会用2个字节表示协议头,例如ox0A表示登录接口,再用4个字节表示登录名,4个字节表示密码等】。以上是简单的对socket跟wcfws等协议的差别说明。socket跟wcfws对比的话,socket性能是最高的,高并发高响应的时候,这里是有差距的,技术上的话,socket需要更加多的技术支持[开发周期长,对人员要求高],而wcf在应用层面上基本无难度,就是一些配置,出现问题也大部分可以通过网络来处理。另外一个就是托管语言本身的问题,GC这块的,GC回收的时候,是需要挂起堆栈上的线程的,而且GC的线程优先级比你所能创建的所有线程的优先级都要高,等GC执行完毕的时候才能去执行你的线程,wcf在堆对象上申请的空间也会更加多,自然导致GC会受到的概率也会更加大,这里也会可能导致wcf性能不如socket。基本上来说,C#的类都是引用对象,都是堆申请的,在引用计数超出的时候,都会被下一个GC[]操作去回收,真是个奇葩的事情。


总之,在ws跟wcf之间选择的话,个人觉得优先选择wcf好点。

如果是对性能要求较高[高并发等],或者是长连接再或者是需要用到UDP这种的话,就基本上无法用wcf跟ws这种了,wcf是没有udp协议的,http协议也只是在tcp协议下的上层协议,底层发送的数据包跟实作是不通的。另外对于长连接,虽然wcf提供了类似回调这种情况机制,只是个人不推荐使用在这种长连接的场合下。


纯手打,哎,晚上睡不着。。。。 楼主采纳了吧

㈧ 如何在windows服务中寄宿wcf服务的例子

在windows服务中寄宿wcf服务,需要继承,此外,还须要继承Installer以安装服务.以下为具体实现步骤:
1.创建文件winservice.cs,输入代码
namespace windowswcfservice
{
using System.ServiceProcess;
using System.ServiceModel;
using System.Configuration.Install;
using System.Configuration;
using System.ComponentModel;
[ServiceContract(Namespace="http://mysample")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
[RunInstaller(true)]
public class ProjectInstaller : Installer
{
private ServiceProcessInstaller process;
private ServiceInstaller service;
public ProjectInstaller()
{
process = new ServiceProcessInstaller();
process.Account = ServiceAccount.LocalSystem;
service = new ServiceInstaller();
service.ServiceName = "WCFWindowsServiceSample";
Installers.Add(process);
Installers.Add(service);
}
}
public class WindowsCalculatorService : ServiceBase
{
public ServiceHost serviceHost = null;
public static void Main()
{
ServiceBase.Run(new WindowsCalculatorService());
}
protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
}
try
{
serviceHost = new ServiceHost(typeof(CalculatorService));
serviceHost.Open();
}
catch(System.Exception err)
{
System.Diagnostics.EventLog.WriteEntry("Application", err.Message);
}
}
protected override void OnStop()
{
if (serviceHost != null)
{
serviceHost.Close();
serviceHost = null;
}
}
}
}

2.用csc编译文件winservice.cs
csc /t:exe winservice.cs /r:"C:/WINDOWS/Microsoft.NET/Framework/v3.0/Windows Communication Foundation/System.ServiceModel.dll" /r:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/System.ServiceProcess.dll /r:System.Configuration.Install.dll

3.创建winservice.exe.config,内容如下:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="windowswcfservice.CalculatorService" behaviorConfiguration="Metadata" >
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/service"/>
</baseAddresses>
</host>
<endpoint address="*" binding="wsHttpBinding" contract="windowswcfservice.ICalculator" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Metadata">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
4.利用工具C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/installutil.exe安装windows 服务.
installutil.exe winservice.exe
5.启动服务:net start WCFWindowsServiceSample
如果服务不能启动,可查看事件日志以定位错误.
6.访问wcf服务:http://localhost:8000/service
7.停止wcf服务:net stop WCFWindowsServiceSample
8.卸载windows服务:installutil.exe /u winservice.exe

㈨ C#调用WCF服务的方法

跟webservice一样, 先引用那个服务, 在代码里直接调用就行
ServiceClient client = new ServiceClient();
using (Stream fileStream = new FileStream("File Name", FileMode.Open, FileAccess.Read, FileShare.Read))
{
client.UploadFile("Name", DateTime.Today.ToString("yyyyMMddhhmmss"), "ID", fileStream);
fileStream.Close();
}
我这个是内一容个上传服务的调用方式

㈩ 怎样用js调用wcf服务

一个很简单的问题是你公开的url是什么?返回的是什么格式?
如果你明确了这两个问题,那么其他的就好办了。

热点内容
影视转载限制分钟 发布:2024-08-19 09:13:14 浏览:319
韩国电影伤口上纹身找心里辅导 发布:2024-08-19 09:07:27 浏览:156
韩国电影集合3小时 发布:2024-08-19 08:36:11 浏览:783
有母乳场景的电影 发布:2024-08-19 08:32:55 浏览:451
我准备再看一场电影英语 发布:2024-08-19 08:14:08 浏览:996
奥迪a8电影叫什么三个女救人 发布:2024-08-19 07:56:14 浏览:513
邱淑芬风月片全部 发布:2024-08-19 07:53:22 浏览:341
善良妈妈的朋友李采潭 发布:2024-08-19 07:33:09 浏览:760
哪里还可以看查理九世 发布:2024-08-19 07:29:07 浏览:143
看电影需要多少帧数 发布:2024-08-19 07:23:14 浏览:121