[英]OneWay communication using NetTcpBinding using c#
我正在嘗試創建與WCF服務(NetTcpBinding)的單向通信,但似乎無法正常工作。
接口:
[ServiceKnownType(typeof(ProcessParameter))]
[ServiceKnownType(typeof(string))]
[ServiceContract]
public interface IExecServiceHost
{
[OperationContract(IsOneWay = true)]
void ExecBPWithPP(ISysObject _caller, UserEntity _currentUser, string _bpName, IProcessParameter _parameter, string _afterBP);
[OperationContract(IsOneWay = true)]
void ExecBPWithNVC(ISysObject _caller, UserEntity _currentUser, string _bpName, Dictionary<string, string> _parameter, string _afterBP);
}
服務:
Uri[] serviceURL = new Uri[] { new Uri(ExecBPEndPointURL) };
ServiceHost host;
host = new ServiceHost(typeof(ExecServiceHost), serviceURL);
host.AddServiceEndpoint(typeof(IExecServiceHost), new NetTcpBinding(), "ExecBP");
host.Open();
Console.ReadKey();
host.Close();
客戶:
using(ChannelFactory<IExecServiceHost> httpFactory = new ChannelFactory<IExecServiceHost>(
new NetTcpBinding(),
new EndpointAddress(ExecBPEndPointURL)))
{
IExecServiceHost httpProxy = httpFactory.CreateChannel();
Dictionary<string, string> serviceBPParam = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
foreach(string key in _parameter.Keys)
serviceBPParam.Add(key, _parameter[key]);
httpProxy.ExecBPWithNVC(_caller, _currentUser, _bpName, serviceBPParam, _afterBP);
httpFactory.Close();
}
當我從ASP.net頁調用WCF客戶端時,它會等待進程完成。 請幫助我我所缺少的。 另外,到目前為止,我還沒有為服務/端點使用任何配置。
以一種方式,通信wcf客戶端不應該等待wcf服務器完成執行。 這是主要問題。
您正在將一種方式的調用與異步調用混淆。
使用Async,客戶端可以進行調用,但是控件立即返回,並且任何響應都通過回調處理。 線程將不等待響應。 我認為這是您期望看到的行為。
對於單向,該服務將不返回http 200以外的任何響應,並且這與執行呼叫處理代碼而導致的任何內部狀態更改無關。 但是,客戶端仍然會阻塞直到收到200,這在負載下仍會花費很長時間。
此外,如果連接失敗,客戶端通道仍然會發生故障,因此即使是單向的,您仍然需要在客戶端上處理這些類型的失敗。
看到這里更多:
重要的是要認識到,盡管某些單向應用程序在將出站數據寫入網絡連接后立即返回,但是在某些情況下,綁定或服務的實現可能導致WCF客戶端使用單向操作進行阻塞。 在WCF客戶端應用程序中,只有將出站數據寫入網絡連接后,WCF客戶端對象才會返回。 對於所有消息交換模式(包括單向操作)都是如此。 這意味着將數據寫入傳輸中的任何問題都會阻止客戶端返回。 根據問題,結果可能是異常,也可能是向服務發送消息的延遲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.