helloworld:一个完整的WCF案例

服务端

 

1.创建一个空的解决方案:WCFDemo:

 

2.创建一个宿主控制台程序:Host

 

3.右击Host项目,选择“添加”--“新建项”,选择“WCF服务”创建名为“Service1.cs”的服务

 

 

如此:VS2010已经为我们创建了 IService1.cs   Service1.cs   app.config  三个文件,其中IService1.cs和Service1.cs 创建了同属于Host命名空间的类,我们可以修改这三个文件:

 

IService1.cs :

using System.ServiceModel;

namespace Host
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string DoWork(int value);
    }
}

 

Service1.cs:

using System.ServiceModel;

namespace Host
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
    public class Service1 : IService1
    {
        public string  DoWork(int value)
        {
            int iPingfang = value * value;
            return string.Format("经过平方后的值为:{0}",iPingfang );
        }
    }
}

 

App.config:

文件原则上可以不用改,但是address太长了(默认的为baseAddress="http://localhost:8732/Design_Time_Addresses/Host/Service1/")缩短为baseAddress=“http://localhost:8732/Service1/”

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service name="Host.Service1">
                <endpoint address="" binding="wsHttpBinding" contract="Host.IService1">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8732/Service1/" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

 

 

 

4.此外WCF服务必须在宿主进程中运行,我们可以修改 Program.cs 文件,创建宿主进程:

using System.ServiceModel;

namespace Host
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(Host.Service1)))
            {
                host.Open();
                Console.WriteLine("服务已经启动......");
                Console.ReadLine();
                host.Close();
            }
        }
    }
}

 

 

 

5.编译运行程序,生成Host.exe文件

 

 

 


 客户端

 

1.启动刚创建的WCF服务宿主进程Host.exe

 

 

2.创建一个客户端控制台程序:Client

 

3.右击“引用”--“添加服务引用”,在“地址”的TextBox里面输入服务器的地址(就是咱们前面设置的baseaddress地址),并点击“前往”将得到目标服务器上面的Services,如下图所示:

 

 

 

 

如此,这一步将在客户端间接借助SvcUtil.exe文件创建客户端代理(命名空间为:using Client.ServiceReference1;)以及配置文件app.config,具体如下:

 

app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IService1" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" />
                    <security mode="Message">
                        <transport clientCredentialType="Windows" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                            algorithmSuite="Default" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:8732/Service1/" binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
                name="WSHttpBinding_IService1">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

 

 

4.修改客户端程序 Program.cs ,并使用代理访问服务契约:

using System.ServiceModel;
using Client.ServiceReference1;//引用命名空间

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            ServiceReference1.Service1Client proxy = new Service1Client();
            string str = proxy.DoWork(2);//运行服务端方法
            Console.WriteLine(str);
            Console.ReadLine();
        }
    }
}

 

 

5.编译运行程序,生成 Client.exe

转载于:https://www.cnblogs.com/jara/p/3659896.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极简实用的Asp.NetCore模块化框架决定免费开源了

背景在开发这个框架之前&#xff0c;前前后后看过好几款模块化的框架&#xff0c;最后在一段时间内对ABP VNext痛下狠心&#xff0c;研究一段时间后&#xff0c;不得不说 ABP VNext的代码层面很规范&#xff0c;也都是一些最佳实践&#xff0c;开发出一个模块效率也很高。但不得…

我做的OSC界面

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/hotbain/blog/118542

Android之Timer和TimerTask的介绍

在开发中我们有时会有这样的需求&#xff0c;即在固定的每隔一段时间执行某一个任务。比如UI上的控件需要随着时间改变&#xff0c;我们可以使用Java为我们提供的计时器的工具类&#xff0c;即Timer和TimerTask。 Timer是一个普通的类&#xff0c;其中有几个重要的方法&#…

有计算机信号专业吗,计算机医学图像及信号处理

院校选择是考研成功关键的第一步。想考计算机医学图像及信号处理专业&#xff0c;选择哪个学校更好&#xff1f;聚创考研网小编为大家整理了相关内容&#xff0c;详细如下&#xff1a;工学类考研辅导班请咨询&#xff1a;juchuang911计算机医学图像及信号处理考研院校是对计算机…

Fragment生命周期

通过Android Studio创建包含两个Fragment的Activity&#xff1a;QuestListFragment、QuestInputFragment 调用的过程如下&#xff1a; 打开APPQuestListFragment﹕ onAttachQuestListFragment﹕ onCreateQuestListFragment﹕ onCreateViewQuestListFragment﹕ onViewCreatedQue…

.NET 6新特性试用 | 模式匹配之Extended Property Patterns

前言模式匹配是一种测试表达式以确定其是否具有某些特征的技术。例如, 下面的Employee类和Manager类&#xff1a;public class Employee {public int Id { get; set; }public string Name { get; set; }public Manager? Manager { get; set; } }public class Manager : Employ…

使用Nagios监控esx、esxi、vcenter

系统环境&#xff1a;Centos6.3 最小化安装环境准备yum install –y libxml2-devel make gcc1、安装前准备 &#xff08;1&#xff09;创建nagios用户和用户组 [rootlocalhost ~]#useradd -s /sbin/nologin nagios [rootlocalhost ~]#mkdir /usr/local/nagios [rootlocalhost ~…

Android之在window下面开发常用的adb命令(不断更新)

window下面开发常用的adb命令 1、查看设备 adb devices 2、安装APK adb install -r 安卓apk的路径 3、查看日志E等级以上 adb logcat *&#xff1a;E; 4、过滤"result" tag日志 adb logcat | findStr "result" 5、过滤"result"tag日志…

计算机广告制作未来发展还行吗,计算机多媒体设计专业和广告设计制作那个好...

技校网专门为您推荐的类似问题答案问题1&#xff1a;计算机多媒体技术和广告设计与制作哪个专业好计算机多媒体涵盖范围广。广告与制作就业前景好。如果想学更多东西的话选择计算机多媒体。包含广告设计。问题2&#xff1a;计算机应用,广告设计与制作,网络技术,多媒体技术哪个好…

Composer快速入门

什么是Composer Composer 是PHP的一个依赖管理工具。你可以在你的项目里声明你依赖的库&#xff0c;然后Composer会帮你解决以下问题&#xff1a;找到这些库以及这些库所依赖的库可以安装的版本&#xff0c;然后进行安装。所以Composer是一个依赖管理工具&#xff0c;而不是一个…

龙芯上市是自主路线被广泛认可的风向标

日前&#xff0c;龙芯通过科创板上市委员会审核&#xff0c;此次计划募资35.12亿元。其中&#xff0c;12.58亿元用于先进制程芯片研发及产业化项目&#xff0c;10.54亿元用于高性能通用图形处理器芯片及系统研发项目&#xff1b;12亿元用于补充流动资金。公开材料还披露了很多细…

“批判”按劳取酬

“批判”按劳取酬<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Jack zhai按劳取酬的意思就是付出多少劳动&#xff0c;就获得多少报酬&#xff1b;这曾经是我认为最为合理的老板与员工之间的合约关系。然而近几年&#xff0c;…

携程编程大赛 (预赛第二场)第一题【剪刀石头布】

Problem Description现有M个人一起玩剪刀石头布&#xff0c;以1&#xff0d;M编号&#xff0c;每人出一种&#xff0c;出过不再改变&#xff0c;但是我们并不知道它到底是哪一种。 &#xff08;其中石头赢剪刀&#xff0c;剪刀赢布&#xff0c;布赢石头&#xff0c;一样则平&am…

AndroidStudio自定义属性xmlns无法识别问题解决in Gradle projects,always use http://schemas.android.com/apk/res-auto

正如in Gradle projects,always usehttp://schemas.Android.com/apk/res-auto for custom attributes所说的 将eclipse中 http://schemas.android.com/apk/res/com.xxx.xxx 换成 http://schemas.android.com/apk/res-auto 这样Gradle就会自动查找自定属性的

量子计算机是程序员的未来,研究者:量子计算机一旦成功问世,时间也许会失去存在的意义...

贝尔实验室的科学家索尔&#xff0c;自从在1994年35界计算科学基础年会上提出量子算法后&#xff0c;立刻引起全世界科学界的轰动&#xff0c;量子计算机的研究热潮自此到来。量子计算机的运行方式以及存储计算方式&#xff0c;都与经典计算机存在着很大不同。经典计算机的存储…

.NET 现代化动态 LINQ 库 Gridify

动态 LINQ大家好&#xff0c;我是等天黑, 这次继续介绍开源项目&#xff0c;Gridify 是一个现代化动态 LINQ 库&#xff0c;它以最简单的方式将您的字符串转换为 LINQ 查询&#xff0c;并且有出色的性能。它还提供了一种使用基于文本的数据应用过滤、排序和分页的简单方法&…

Android之Toolbar的三个问题:修改左边箭头颜色、怎样修改右边以及子activity中的toolbar添加返回箭头

1&#xff09;怎样修改左边这个小箭头的颜色&#xff1f;2&#xff09;怎样修改右边这三个点的颜色、怎样把这三个点替换成我自己的图标&#xff1f;3&#xff09;怎样让“交易清单”这4个字居中显示&#xff1f; 首先设置Theme为AppCompat.NoActionBar。 (1)toolbar可以通过设…