WCF(一)创建WCF服务

1.创建空白Solution

选择File—New—Project—Other Project Types—Visual Studio Solution—Blank Solution

在下方输入Solution名字和路径



2.创建DataContracts

2.1 创建Test.DataContracts

右键Solution—AddNew Project—Windows—Class Library,在下方输入名字“Test.DataContracts”



右键Test.DataContracts—Properties—Application—Target framework

”Target framework”默认为”.NET Framework 4 Client Profile”,需将其设置为”.NET Framework 4”

2.2 删除Class1.cs

右键Class1.cs—Delete


2.3 创建UserInfo.cs

右键Test.DataContracts—Add—Class,在下方输入名字“UserInfo.cs”



UserInfo.cs内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test.DataContracts
{
    [DataContract]
    public class UserInfo
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public int Age { get; set; }
    }
}

2.4 添加引用

此时UserInfo.cs会报错,需要添加引用

右键References—Add Reference.NetSystem.Runtime.Serialization



右键DataContract—Resolve—using System.Runtime.Serialization


完整UserInfo.cs内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace Test.DataContracts
{
    [DataContract]
    public class UserInfo
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public int Age { get; set; }
    }
}

3.创建Test.ServiceContracts

3.1 创建Test.ServiceContracts

右键Solution—AddNew Project—Windows—Class Library,在下方输入名字“Test.ServiceContracts”

右键Test.ServiceContracts—Properties—Application—Target framework

”Target framework”默认为”.NET Framework 4 Client Profile”,需将其设置为”.NET Framework 4”

3.2 删除Class1.cs

3.3 创建接口IService.cs

右键Test.ServiceContracts—Add—New Item—Visual C#ItemsInterface,在下方输入名字“IService.cs”



IServcie.cs内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test.ServiceContracts
{
    [ServiceContract]
    public interface IService
    {
        [OperationContract]
        [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
        UserInfo getUserInfo();
    }
}

3.4 添加引用

右键References—Add Reference.NET--System.ServiceModel、System.ServiceModel.Web

右键References—Add ReferenceProjects--Test.DataContracts

完整IServcie.cs内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Web;
using Test.DataContracts;

namespace Test.ServiceContracts
{
    [ServiceContract]
    public interface IService
    {
        [OperationContract]
        [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
        UserInfo getUserInfo();
    }
}

4.创建Test.ServiceImpls

4.1 创建Test.ServiceImpls

右键Solution—AddNew Project—Windows—Class Library,下方输入名字“Test.ServiceImpls”

右键Test.ServiceImpls—Properties—Application—Target framework

”Target framework”默认为”.NET Framework 4 Client Profile”,需将其设置为”.NET Framework 4”

4.2 删除Class1.cs

4.3 创建ServiceImpl.cs

右键Test.ServiceImpl—Add—Class,在下方输入名字“ServiceImpl.cs”

ServiceImpl要实现IService接口

ServiceImpl.cs内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test.ServiceImpls
{
    public class ServiceImpl : IService
    {
        public UserInfo getUserInfo()
        {
            UserInfo userInfo = new UserInfo();
            userInfo.Name = "Tom";
            userInfo.Age = 11;
            return userInfo;
        }
    }
}

ServiceImpl里实现IService的getUserInfo方法,该方法里实例UserInfo对象,并填入Name、Age属性

4.4 添加引用

右键References—Add ReferenceProjectsTest.DataContracts、Test.ServiceContracts

完整ServiceImpl.cs内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Test.DataContracts;
using Test.ServiceContracts;

namespace Test.ServiceImpls
{
    public class ServiceImpl : IService
    {
        public UserInfo getUserInfo()
        {
            UserInfo userInfo = new UserInfo();
            userInfo.Name = "Tom";
            userInfo.Age = 11;
            return userInfo;
        }
    }
}

5.创建Test.ServiceHost

5.1 创建Test.ServiceHost

右键Solution—AddNew Project—WCF—WCF Service Application,下方输入名字“Test.ServiceHost”

Test.ServiceHost的目录结构


5.2 删除App_Data、IService1.cs、Service1.svc.cs、Web.Debug.config、Web.Release.config

5.3 修改Service1.svc和Web.config

将Service1.svc改名为Test.svc

编辑Test.svcTest.svc内容

<%@ ServiceHost Language="C#" Debug="true" Service="Test.ServiceImpls.ServiceImpl"%>

编辑Web.configWeb.config内容

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <customErrors mode="Off" />
    <compilation debug="true" targetFramework="4.0">
    </compilation>
    <authentication mode="Windows" />
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
    <httpRuntime appRequestQueueLimit="10" />
  </system.web>
  <system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <services>
      <service name="Test.ServiceImpls.ServiceImpl" behaviorConfiguration="Test.ServiceHostBehavior">
        <endpoint address="TestEndpoint" behaviorConfiguration="TestBehavior" binding="webHttpBinding" contract="Test.ServiceContracts.IService" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Test.ServiceHostBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceThrottling maxConcurrentCalls="100" maxConcurrentSessions="100" maxConcurrentInstances="200" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="TestBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Test.ServiceHost修改后的目录结构


5.4 添加引用

右键References—Add ReferenceProjectsTest.ServiceImpls

6.将WCF发布到IIS

6.1创建虚拟路径

右键Test.ServiceHost—Properties—Web—Server—Use Local IIS Web server



Project Url可以自定义。单击”Create Virtual Directory”,之后会弹出创建成功提示


在IIS下可以看到Test.ServiceHost站点


Test.ServiceHost目录结构


6.2 Debug WCF

右键Test.ServiceHost—Set as StartUp Project


单击VS工具栏的“Debug” (或按F5


WCF部署成功会在IE下弹出如下页面


点击Test.svc弹出如下页面


7.测试WCF

利用C#访问Test.ServiceHostgetUserInfo接口

新开一个VS窗口,选择File—New—Project—Visual C#Console Application

在下方输入Console Application名字和路径



编辑Program.csProgram.cs内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var request = (HttpWebRequest)WebRequest.Create("http://localhost/Test.ServiceHost/Test.svc/TestEndpoint/getUserInfo");
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            //request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                //stream.Write(data, 0, data.Length);
            }

            var response = (HttpWebResponse)request.GetResponse();
            var responseString = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();
            Console.WriteLine(responseString);
            Console.Read();
        }
    }
}

单击VS工具栏的“Debug”(或按F5,会弹出如下窗口




以上方法创建的WCF分为四个模块:DataContractsServiceContractsServiceHostServiceImpls。由于四个模块的代码量很小,这四个模块可以简化只剩一个ServiceHost模块,即将其余模块的代码放到ServiceHost模块。但如果代码量大的话,还是分为四个模块比较清晰。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值