zoukankan      html  css  js  c++  java
  • Visual Studio2012中搭建WCF项目

    分布式系统:指在系统与系统之间进行通信,系统不再是孤立的,例如:淘宝查看物流信息,或是hao123的天气预报,这些可能都是用的别的系统的web方法。

    1.创建空的解决方案

    2.新建项目-WCF服务库项目,项目名称:XfrogWCFService

    3.在XfrogWCFService项目中添加[System.ServiceModel]的引用

    4.上图是该项目的结构打开IFirstServices.cs这个是接口也是一个服务契约,客户端调用方法都必须遵守,代码如下。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.ServiceModel;
    namespace XfrogWCFService
    {
            /// <summary>
            /// 注意在接口上申明了ServiceContract特性,即服务契约,表明该接口是一个服务
            /// </summary>
            [ServiceContract]
            public interface IFirstService
            {
                /// <summary>
                /// 表示该方法是IFirstService的一个服务方法,客户端可远程调用该方法。
                /// </summary>
                /// <param name="name"></param>
                /// <returns></returns>
                [OperationContract]
                String GetData(int a,int b);
            }
    }
    

    5.再打开FiretService.cs这个文件对接口进行实现,也就是Web方法所要实现的功能,为了学习,做了一个两数相加的操作,代码如下。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace XfrogWCFService
    {
       public class FirstService : IFirstService
        {
            string IFirstService.GetData(int a,int b)
            {
                return String.Format("{0}+{1}={2}",a,b,(a+b));
            }
        }
    }
    

    6.下面我们在解决方案中重新建立一个【客户端控制台应用程序】的项目,名称叫做Host,这是web服务的主人[宿主],意思是该服务的启动或者关闭都归它来控制。

    7.我们的解决方案成了上面的结构,也同样要添加[System.ServiceModel]的引用,还有对XfrogWCFService的引用,然后打开Program.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.ServiceModel;
    using XfrogWCFService;
    namespace Host
    {
        class Program
        {
            static void Main(string[] args)
            {   //这段代码说创建一个新的服务宿主,这个服务是FirstService
                //也就是实现IFirstService接口的类
                using (ServiceHost host = new ServiceHost(typeof(FirstService)))
                {
                    host.Open();
                    Console.WriteLine("服务已启动,按任意键中止...");
                    Console.ReadKey(true);
                    host.Close();
                }
            }
        }
    }
    

    8.接下来打开Host项目中的App.config文件,应该是会添加ServiceModel节点,如下面:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      
      <system.serviceModel>
        <services>
          <service name="XfrogWCFService.FirstService" behaviorConfiguration="behaviorConfiguration">
            <host>
              <baseAddresses>
                <add baseAddress="http://192.168.10.58:8100/"/>
              </baseAddresses>
            </host>
            <endpoint address="http://192.168.10.58:8100/" binding="basicHttpBinding"
                      contract="XfrogWCFService.IFirstService"
                      name="BasicHttpBinding_IFirstService"></endpoint>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="behaviorConfiguration">
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    
    </configuration>
    

    9.现在服务这边应该就是搭建好了,可以测试下,运行Host项目:如果是这样代表服务已经搭建成功了!

    ------------------------------------下面是客户端的哦-----------------------------------------

     1.重新在别的地方建立一个解决方案,然后创建一个类库名称是Clinent1。

     2.添加webService引用,步骤是:

       2.1右击【引用】点击【添加服务引用】然后如下图:

       地址是我们在wcf服务器端App.config页面写的地址将ip换成localhost

       点击转到会查看到这个地址的服务

       命名空间可以修改,这个是我们调用服务的命名空间,然后点击【确定】

      

     3.给Clinent1添加ServiceModel引用。

     4.在Clinent1中新建一个类Program.cs代码如下。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Clinent1
    {
        public class Program
        {
            /// <summary>
            /// WCF调用方法
            /// </summary>
            /// <param name="par"></param>
            /// <returns></returns>
            public string getwcfstr(int a,int b)
            {
                ServiceReference1.FirstServiceClient aa = new ServiceReference1.FirstServiceClient();
                return aa.GetData(a, b);//调用服务服务器接口的方法。
            }
        }
    }
    

    5.在该解决方案中创建一个新的网站项目,添加ServiceModel和Clinent1的引用。

    6.Clinent1的App.config如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IFirstService" />
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://192.168.10.58:8100/" binding="basicHttpBinding"
                    bindingConfiguration="BasicHttpBinding_IFirstService" contract="ServiceReference1.IFirstService"
                    name="BasicHttpBinding_IFirstService" />
            </client>
        </system.serviceModel>
    </configuration>

    7.web.Config在configuration下添加,代码如下:

    <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding_IFirstService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                  maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                    realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://192.168.10.58:8100/" binding="basicHttpBinding"
              bindingConfiguration="BasicHttpBinding_IFirstService" contract="ServiceReference1.IFirstService"
              name="BasicHttpBinding_IFirstService" />
        </client>
      </system.serviceModel>
    

    8.添加一个aspx页面,前台写个div后台代码如下:

     protected void Page_Load(object sender, EventArgs e)
            {
                Program p=new Program();
    //设置div的内容调用服务传递参数 div_wcf.InnerText = p.getwcfstr(10, 5); }

    9.客户端的结构是:

     

    10.运行WebForm1.aspx的效果:为了测试,做的功能很简单啊。

  • 相关阅读:
    Mac——Mac使用MicrosoftRemoteDesktopforMac同一局域网内远程桌面Windows
    Linux—Unix、Linux、macOS操作系统的关系是什么?
    Mac/Windows——怎么启动进入或退出jupyter notebook?如何网页查看后台目录和网页编辑脚本文件
    金蝶EAS——我的EAS报销流程怎么能让另一个人看到呢?即如何设置流程传阅功能?设置“代理报销”
    【C#】.Net 腾讯云一句话识别 【实例】
    ucharts图表tooltip自定义换行
    《山丘》李宗盛
    指定特定ip ip段 用户使用ssh访问linux系统
    (论文笔记)Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
    (论文笔记)Deep Neural Network for YouTube Recommendation
  • 原文地址:https://www.cnblogs.com/Evan-Pei/p/4347180.html
Copyright © 2011-2022 走看看