silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

客户端: Duplexservice.xaml <UserControl x:Class="Silverlight20.Communication.Duplexservice"         xmlns="http://scheR_224_11845@as.microsoft.com/winfx/2006/xaml/presentation"             xmlns:x="http://scheR_224_11845@as.m

客户端:
Duplexservice.xaml
<UserControl x:Class="Silverlight20.Communication.Duplexservice"
        xmlns="http://scheR_224_11845@as.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x="http://scheR_224_11845@as.microsoft.com/winfx/2006/xaml">
        <StackPanel HorizontalAlignment="Left" Margin="5">
        
                <TextBox x:Name="txtStockCode" Text="请输入股票代码" Margin="5" />
                <Button x:Name="btnSubmit" Content="获取股票信息" Click="btnSubmit_Click" Margin="5" />
                <Button x:Name="btnStop" Content="停止获取" Click="btnStop_Click"    Margin="5" />
                <TextBlock x:Name="lblStockmessage" Margin="5" />
        
        </StackPanel>
</UserControl>
 
Duplexservice.xaml.cs

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Collections.Generic;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Linq;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Net;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Windows;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Windows.Controls;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Windows.Documents;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Windows.Input;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Windows.Media;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Windows.Media.Animation;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Windows.Shapes;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.serviceModel;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.serviceModel.ChAnnels;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.Threading;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

using System.IO;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

namespace Silverlight20.Communication

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

{

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

         public partial class Duplexservice : UserControl

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                SynchronizationContext _syncContext;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                 // 是否接收服务端发送过来的消息

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                 bool _status = true;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                 public Duplexservice()

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        initializeComponent();

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                 private void btnSubmit_Click( object sender,RoutedEventArgs E)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        _status = true;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                         // UI 线程

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        _syncContext = SynchronizationContext.Current;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        PollingDuplexhttpBinding binding = new PollingDuplexhttpBinding()

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                 // InactivityTimeout - 服务端与客户端在此超时时间内无任何消息交换的情况下,服务会关闭其会话

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                inactivityTimeout = TimeSpan.Fromminutes(1)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        };

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                         // 构造 IDuplexSessionChAnnel 的信道工厂

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IChAnnelFactory<IDuplexSessionChAnnel> factory =

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                binding.buildChAnnelFactory<IDuplexSessionChAnnel>( new BindingParameterCollection());

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                         // 打开信道工厂

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IAsyncResult factoryOpenResult =

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                factory.beginOpen( new AsyncCallBACk(OnOpenCompleteFactory),factory);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                         if (factoryOpenResult.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                 // 如果信道工厂被打开的这个 异步操作 已经被 同步完成 则执行下一步

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                CompleteOpenFactory(factoryOpenResult);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                 private void btnStop_Click( object sender,RoutedEventArgs E)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        _status = false;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                 void OnOpenCompleteFactory(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                         // 该异步操作已被同步完成的话则不做任何操作,反之则执行下一步

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                         if (result.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                 return;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                         else

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                CompleteOpenFactory(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                 void CompleteOpenFactory(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IChAnnelFactory<IDuplexSessionChAnnel> factory = result.AsyncState as IChAnnelFactory<IDuplexSessionChAnnel>;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                         // 完成异步操作,以打开信道工厂

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        factory.Endopen(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                         // 在信道工厂上根据指定的地址创建信道

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IDuplexSessionChAnnel chAnnel =

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                factory.CreateChAnnel( new EndpointAddress( "http://localhost:3036/Duplexservice.svc"));

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 打开信道

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IAsyncResult chAnnelOpenResult =

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                chAnnel.beginOpen(new AsyncCallBACk(OnOpenCompleteChAnnel),chAnnel);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        if (chAnnelOpenResult.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                // 如果信道被打开的这个 异步操作 已经被 同步完成 则执行下一步

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                CompleteOpenChAnnel(chAnnelOpenResult);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void OnOpenCompleteChAnnel(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 该异步操作已被同步完成的话则不做任何操作,反之则执行下一步

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        if (result.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                return;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        else

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                CompleteOpenChAnnel(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void CompleteOpenChAnnel(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IDuplexSessionChAnnel chAnnel = result.AsyncState as IDuplexSessionChAnnel;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 完成异步操作,以打开信道

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        chAnnel.Endopen(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 构造需要发送到服务端的 System.serviceModel.ChAnnels.message (客户端终结点与服务端终结点之间的通信单元)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        message message = message.Createmessage(

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                chAnnel.GetProperty<messageVersion>(),// messageVersion.soap11 (Duplex 服务仅支持 Soap11)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                "Silverlight20/IDuplexservice/SendStockCode",// Action 为请求的目的地(需要执行的某行为的路径)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                txtStockCode.Text);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 向目的地发送消息

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IAsyncResult resultChAnnel =

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                chAnnel.beginSend(message,new AsyncCallBACk(OnSend),chAnnel);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        if (resultChAnnel.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                // 如果向目的地发送消息的这个 异步操作 已经被 同步完成 则执行下一步

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                CompleteOnSend(resultChAnnel);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 监听指定的信道,用于接收返回的消息

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        receiveLoop(chAnnel);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void OnSend(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 该异步操作已被同步完成的话则不做任何操作,反之则执行下一步

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        if (result.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                return;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        else

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                CompleteOnSend(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void CompleteOnSend(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        try

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                IDuplexSessionChAnnel chAnnel = (IDuplexSessionChAnnel)result.AsyncState;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                // 完成异步操作,以完成向目的地发送消息的操作

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                chAnnel.EndSend(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        catch (Exception eX)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                _syncContext.Post(WriteText,ex.ToString() + Environment.NewLinE);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void ReceiveLoop(IDuplexSessionChAnnel chAnnel)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 监听指定的信道,用于接收返回的消息

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IAsyncResult result =    

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                chAnnel.beginReceive(new AsyncCallBACk(OnReceiveCompletE),chAnnel);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        if (result.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                CompleteReceive(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void OnReceiveComplete(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        if (result.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                return;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        else

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                CompleteReceive(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void CompleteReceive(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IDuplexSessionChAnnel chAnnel = (IDuplexSessionChAnnel)result.AsyncState;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        try

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                // 完成异步操作,以接收到服务端发过来的消息

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                message receivedmessage = chAnnel.EndReceive(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                if (receivedmessage == null)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        // 服务端会话已被关闭

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        // 此时应该关闭客户端会话,或向服务端发送消息以启动一个新的会话

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                else

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        // 将接收到的信息输出到界面上

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        String text = receivedmessage.GetBody<String>();

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        _syncContext.Post(WriteText,text + Environment.NewLinE);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        if (!_status)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                                // 关闭信道

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                                IAsyncResult resultFactory =

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                                        chAnnel.beginClose(new AsyncCallBACk(OnCloseChAnnel),chAnnel);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                                if (resultFactory.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                                        CompleteCloseChAnnel(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        else

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                                // 继续监听指定的信道,用于接收返回的消息

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                                receiveLoop(chAnnel);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        catch (Exception eX)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                // 出错则记日志

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                using (StreamWriter sw = new StreamWriter(@"C:\Silverlight_Duplex_Log.txt",true))

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        sw.Write(ex.ToString());

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                        sw.WriteLine();

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void OnCloseChAnnel(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        if (result.CompletedSynchronously)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                return;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        else

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                                CompleteCloseChAnnel(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void CompleteCloseChAnnel(IAsyncResult result)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        IDuplexSessionChAnnel chAnnel = (IDuplexSessionChAnnel)result.AsyncState;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 完成异步操作,以关闭信道

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        chAnnel.EndClose(result);

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)


上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                void WriteText(object text)

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                {

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        // 将信息打到界面上

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                        lblStockmessage.Text += (String)text;

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

                }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

        }

上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

}
 
 

大佬总结

以上是大佬教程为你收集整理的上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)全部内容,希望文章能够帮你解决上接稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。