WCF设计服务协议

Posted bibi-feiniaoyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WCF设计服务协议相关的知识,希望对你有一定的参考价值。

实现WCF的步骤如下:

  1. 设计服务协议
  2. 实现服务协议
  3. 配置服务
  4. 托管服务
  5. 生成客户端(这步可有可无)

设计或定义服务协议要么使用接口,要么使用类。建议接口,使用接口好处一堆例如修改接口的实现,但是服务协定有无需改变。

设计服务协议,接口上使用 ServiceContractAttribute ,方法上使用OperationContractAttribute。

服务协议的每个方法的参数和返回值的类型都必须是可序列化的,默认.net自带的类型都是可序列化的。

如果有在接口里面使用到自定义的类型,就要使用到数据协议了,那自定义的类型 使用DataContractAttribute,里面属性成员使用DataMemberAttribute。

技术图片
namespace DataContractinWCF.Web
{
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        List<Customer> GetCustomerData(int CustomerID);
    }
    [DataContract]
    public class Customer
    {
        private string m_Name;
        private int m_Age;
        private int m_Salary;
        private string m_Designation;
        private string m_Manager;
        [DataMember]
        public string Name
        {
            get
            {
                return m_Name;
            }
            set
            {
                m_Name = value;
            }

        }

        [DataMember]
        public int Age
        {
            get
            {
                return m_Age;
            }
            set
            {
                m_Age = value;
            }
        }

        [DataMember]
        public int Salary
        {
            get
            {
                return m_Salary;
            }
            set
            {
                m_Salary = value;
            }
        }
        [DataMember]
        public string Designation
        {
            get
            {
                return m_Designation;
            }
            set
            {
                m_Designation = value;
            }
        }
        [DataMember]
        public string Manager
        {
            get
            {
                return m_Manager;
            }
            set
            {
                m_Manager = value;
            }
        }
    }
}
View Code

wcf的消息交换有三种模式:请求/答复、单向、双工。

默认是“请求/答复”模式,即使方法返回值是void,也可以是请求/答复。这种模式优点是,服务发生错误会返回soap错误

技术图片
[OperationContractAttribute]  
string Hello(string greeting);

[OperationContractAttribute]  
void Hello(string greeting);
View Code

单向:设置IsOneWay=true,服务操作方法返回值必须是void。客户端发送消息后,就不再等待服务操作。即使服务报错也不返回,只能知道发送消息报错。

技术图片
[OperationContractAttribute(IsOneWay=true)]  
void Hello(string greeting);
View Code

双工通信:比前两种复杂。。。跳过先。

如果方法参数有ref参数或out参数,不能使用单向通信,因为必须有返回响应值。

 

以上是关于WCF设计服务协议的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS 中托管 WCF 服务时协议映射错误

WCF 服务问题 - 不支持协议“http”。如何解决?

WCF 协议异常

WCF Web 服务错误:“服务端点绑定不使用 HTTP 协议”?

关于WCF中协议使用的场景

2021-07-04 .NET高级班 90-分布式服务 WCF的使用