當前位置:首頁 » 城管服務 » 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