簡體   English   中英

使用C#使用NetTcpBinding進行OneWay通信

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM