WCF系列教程之WCF消息交换模式之单项模式

1、使用WCF单项模式须知

(1)、WCF服务端接受客户端的请求,但是不会对客户端进行回复

(2)、使用单项模式的服务端接口,不能包含ref或者out类型的参数,至于为什么,请参考C# ref与out关键字解析

(3)、使用单项模式的服务端接口没有返回值,返回类型只能为void

(4)、通过设置OperationContract契约的IsOneWay=True可以将满足要求的方法设置为这种消息交换模式

2、代码实例

(1)、第一步

i、首先建一个名为IService的类库作为服务层,新建IOneWay接口

ii、导入System.ServiceModel命名空间

iii、在IOneWay接口中定义一个符合单项模式要求的方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;

namespace IService
{
    [ServiceContract]
    public interface IOneWay
    {
        [OperationContract(IsOneWay=true)]
        void HelloWorld(string name);
    }
}

(2)、第二步

i、建一个Service类库实现IService中的单项模式的方法

using IService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Service
{
    public class OneWay : IOneWay
    {
        void IOneWay.HelloWorld(string name)
        {
            Thread.Sleep(6000);
        }
    }
}

ok,服务初始化成功

(3)、第三步

创建WCF宿主,这里因为本地以及有WCF宿主了,所以这里就不建了,不知道怎么建的话,参考WCF系列教程之初识WCF,所以将服务通过配置配置文件发布到WCF宿主中

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Service.OneWayService" behaviorConfiguration="OneWayBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/OneWay/"/>
          </baseAddresses>
        </host>

        <endpoint address="" binding="wsHttpBinding" contract="IService.IOneWayService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
      </services>


    <behaviors>
      <serviceBehaviors>
        <behavior name="OneWayBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="True"/>
          </behavior>
        </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

(4)、第四步

i、重新生成解决方案,打开Host.exe,打开WCF服务,浏览器中输入http://localhost:8000/OneWay/

ok,服务发布成功

(5)、第五步

i、创建客户端程序,并通过微软的svcutil工具生成UserInfoService服务的客户端代理类,开始菜单/Microsoft Visual Studio 2012/Visual Studio Tools/Visual Studio 2012开发人员命令提示工具,定位到当前客户端

l路径,输入命令:svcutil http://localhost:8000/OneWay/?wsdl /o:OneWay.cs,生成客户端代理类,生成成功之后,将文件添加到项目中.

ii、调用代理类,代码如下:

Console.WriteLine("****************单向通讯服务示例*******************");
            OneWayServiceClient proxy = new OneWayServiceClient();
            Console.WriteLine("方法调用前时间:" + System.DateTime.Now);
            proxy.HelloWorld("WCF");
            Console.WriteLine("方法调用后时间:" + System.DateTime.Now);
            Console.Read();

虽然服务器方法的时间进程暂停了6s,但客户端的表现出的只是单向的,并没有等待服务器的时间,也就是服务器并没有像客户端发送响应的消息。

iii、通过Vs提供的WCF测试工具

,来对WCF服务进行测试,输入服务地址

,点击调用

,瞬间服务端返回

我们发现只有请求消息,没有返回的消息,说明服务器并没有对此作出任何反应。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Create Sun

quartz.net任务调度:源码及使用文档

前言   前段时间把自己封装quartz.net 类库的过程总结到博客园,有网友想要看一下源码,所以就把源码传到github上去了,今天把地址分享给大家,程序中...

3639
来自专栏技术博客

Asp.Net MVC3.0网站统计登录认证的在线人数

  对于一个网站来说,统计在线人数是一个很重要的工作。平时也发现很多的网站论坛等都有在线人数的显示。对于一个网站如果在线人数很多,用户看到了这么个数字也是很了不...

1212
来自专栏企鹅号快讯

HttpClient使用详解

Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不...

3605
来自专栏Pythonista

Django之Form功能

Django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm

1552
来自专栏跟着阿笨一起玩NET

webservice 缓存机制

本文转载:http://blog.csdn.net/zhdd1234/article/details/4555472

2301
来自专栏.NET开发那点事

AServer - 基于Asp.net core Kestrel的超迷你http服务器

  AServer是基于ASP.NET Core Kestrel封装的一个超迷你http服务器。它可以集成进你的Core程序里,用来快速的响应Http请求,而不...

1201
来自专栏菩提树下的杨过

Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由

以前在做asp的时候,要把 /default.asp?id=123映射成/default/123,需要借助IISRewriter这个组件,到了asp.net以后...

19410
来自专栏.NET开发那点事

AServer - 基于Asp.net core Kestrel的超迷你http服务器

  AServer是基于ASP.NET Core Kestrel封装的一个超迷你http服务器。它可以集成进你的Core程序里,用来快速的响应Http请求,而不...

1076
来自专栏古时的风筝

ASP.NET是如何在IIS下工作的

ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化。 IIS6(IIS7的经典模...

2748
来自专栏代码世界

Django-admin管理工具

1472

扫码关注云+社区