使用WCF更新数据

wcf自动更新 wcf 自动更新程序,添加到自己的程序中就可以直接使用。 立即下载

        虽然基于Web Service 的SOAP和POST并不总是加载数据的理想机制,但它们仍然适合用于对方法的调用,特别是对复杂数据的输入或修改。使用WCF时,并不真正需要作出一区分——同样的WCF方法能够像简单XML终结点或SOAP终结点一样发布。服务层将完全由AJAX界面分开,既不需要改变服务中的代码,也不需要对AJAX或者任何其他客户端技术指定任何的约束。事实上,可以选择在一些替代的传输机制上发布WCF应用。例如MSMQ、TCP/IP,甚至SMTP。

        注意:
                 Wiki是为了便于在Web上进行沟通而开发的一种记事本类应用程序,其设计宗旨是能够高效、简便地使用。下例中同时建立一个知识基础应用来学习使用Wiki技术。更多                  关于Wiki的信息参见 http://en.wikipedia.org/wiki/Wiki

        建立简单的Web Service来记录应用状态的消息。首先,定义一个名叫WikilData的数据类,这个类是WCF服务的起始点——它定义了服务返回的消息。可以使用DataContract和DataMember属性来定义数据结构,在WikiData类中,使用DataContract属性来定义元素的命名空间,使用DataMember属性来定义XML序列元素(WikiData类的定义参见下面代码)。定义这个协议后,就能够编写任何针对这种数据格式的客户端应用。

    [DataContract(Name = "WikiData",
        Namespace = "ServiceOrientedAjax.Examples")]
    public class WikiData
    { 
        [DataMember]
        public string Title { get; set; }

        [DataMember]
        public string Body { get; set; }

    }

输出的格式如下:
<WikiData xmlns="ServiceOrientedAjax.Examples" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Body>Hello WCF World!</Body> 
  <Title i:nil="true" /> 
  </WikiData>


        在定义了数据协议之后,下一步是实现服务。可以是用VS模板或者通过定义标有ServiceContract属性的类来创建服务。ServiceContract属性将这个类标记为WCF的服务实现。每一个作为Web Service终结点发布的方法都必须使用OperationContract属性进行标识。OperationContract属性与ASP.NET Web Service中使用的WebMethod相似,定义了一个通过WCF终结点发布的方法。
        由于定义具有DataContract属性的数据类WikiData,因此能够简单使用WikiData作为Get请求的返回类型以及Set操作的输入参数。下列程序定义了一个简单WCF服务,此服务使用上例中的wikiData数据协定。

  [ServiceContract(Namespace = "ServiceOrientedAjax.Examples")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1 
    {
        [OperationContract]
        public void SetWiki(WikiData wiki)
        {
            HttpContext.Current.Application[wiki.Title] = wiki.Body;
        }

        [OperationContract]
        [WebGet]
        public WikiData GetWiki(string title)
        {
            WikiData wiki = new WikiData 
            { 
                Title=title,
                Body=(string)HttpContext.Current.Application[title] ?? "Hello WCF World!"
            };
            return wiki;
        }
    }

        在定义了WCF服务之后,需要在ASP.NET应用中通过服务文件(SVC文件)和web.config定义终结点。SVC文件时ASP.NET中用来激活WCF服务终结点的简单文本文件,该文件中应当包含一下对 Service1 WCF终结点的引用:
<%@ ServiceHost  Service="WcfServiceLibrary1.Service1" %>

        除了在SVC文件中定义服务终结点之外,还必须在web.config中定义终结点和行为。这些行为可以影响多个终结点,并且能够改变终端访问WCF终结点的方式。在这个例子中,定义了POX终结点以及包括enableWebScript在内的JSON-enable终结点。这些增加的行为可以通过behaviorConfiguration元素来启用。
        为了启用ASP.NET AJAX来为服务建立JavaScript代理类,可以指定能够映射到多个WCF终结点的enableWebScript行为。下面的例子定义了名为JsonBehavior的行为配置项(JsonBehavior 是随意选择的命名),其中包含着enableWebScript行为:
 <behavior name="JsonBehavior">
          <enableWebScript />
        </behavior>

        enableWebScript行为使用JavaScript对象符号来定义数据,将默认响应从XML格式转换JSON格式。在手工处理数据并且不能使用XSLT转换时,这种格式比较易于处理。由于WCF从实现中抽象出终结点行为,因此可以在web.config内定义XML终结点和JSON终结点而不会导致服务的任何改变。非常重要的一点是:这种映射通过配置而不是服务来开发完成。
        为了定义一个负载的提供JSON数据的终结点,可以使用web.config将终结点映射到行为配置上。例如将一个附加的终结点(这是一个具备与Service.svc终结点同样实现的JSON-enable终结点)映射到Service.svc/json上。要定义这个终结点,需要使用一个子终结点元素来创建服务元素,终结点元素为服务定义了地址、行为配置、绑定以及协定。终结点的地址与激活WCF服务的.svc文件相关,behaviorConfiguration定义了终结点的附加行为。接下来的例子为Service1定义了服务中金额的,同时含有一个映射到/json、使用JsonBehavior配置的附加终结点。
 <services>
      <service name="WcfServiceLibrary1.Service1" behaviorConfiguration="Global">
        <endpoint address="" behaviorConfiguration="PoxBehavior"
        binding="webHttpBinding" contract="WcfServiceLibrary1.Service1" />
        <endpoint address="json" behaviorConfiguration="JsonBehavior"
        binding="webHttpBinding" contract="WcfServiceLibrary1.Service1" />
      </service>
    </services>

         当通过具有enableClientScipt行为的终结点访问服务时,上面的数据协定会输出如下的JSON数据类:
{"wiki":{"Title":"default","Body":"Hello WCF World!"}}

        这个JSON格式数据流包含着与数据协定定义的XML输出相同的内容。由于在脚本中,JSON流比较容易使用,因此如果你不使用XSLT转换器,Microsoft将选择它作为脚本激活的Web Service的默认行为。
        由于已经具备了在web.config中为/json终结点定义的enableWebScript行为,ASP.NET AJAX运行环境会为服务生产一个JavaScript代理,这个代理能够调用WCF服务并获取相应。为了手工检查JavaScript代理,要使用WCF终结点并在URL后面加上/jsdebug开工选项,例如: http://localhost/ajaxfundamentals/simpleservice.svc/json/jsdebug 。代理中会含有通过ASP.NET AJAX JavaScript框架调用Web Service的正确的JavaScript语法细节,包括用来调用和索引数据的序列化对象,此时,你所需要了解的就是直接调用的实例方法。对于每一个Web Service操作,在方法的参数中应当添加 onSuccess  、onFailed 以及 userContext。由于所有的网络调用都是以异步方式的,因此必须为响应传递回调句柄。尽管能够将任意对象作为用户上下文进行传递,但通常userContext对象是原样传递给公共代理方法,包括GetWiki方法和SetWiki方法。实际的代理中包含更多的代码,但通常你需要调用的方法是对于公共服务方法的JavaScript函数。

 
SetWiki:function(wiki,succeededCallback, failedCallback, userContext) {
/// <param name="wiki" type="ServiceOrientedAjax.Examples.WikiData">WcfServiceLibrary1.WikiData</param>
/// <param name="succeededCallback" type="Function" optional="true" mayBeNull="true"></param>
/// <param name="failedCallback" type="Function" optional="true" mayBeNull="true"></param>
/// <param name="userContext" optional="true" mayBeNull="true"></param>
return this._invoke(this._get_path(), 'SetWiki',false,{wiki:wiki},succeededCallback,failedCallback,userContext); },
GetWiki:function(title,succeededCallback, failedCallback, userContext) {
/// <param name="title" type="String">System.String</param>
/// <param name="succeededCallback" type="Function" optional="true" mayBeNull="true"></param>
/// <param name="failedCallback" type="Function" optional="true" mayBeNull="true"></param>
/// <param name="userContext" optional="true" mayBeNull="true"></param>
return this._invoke(this._get_path(), 'GetWiki',true,{title:title},succeededCallback,failedCallback,userContext); }


        在引用ASP.NET AJAX生成的JavaScript代理类后,才能在AJAX应用中使用这段代码,这就需要在Service节点中使用ScriptManager控件,定义对Service.svc的引用。为了增加ServiceReference,需要把带有Path参数的ServiceReference加到WCF终结点中,如下所示:

 <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/Service.svc/json" /></Services>
    </asp:ScriptManager>

下面是整体的程序清单:
HTML界面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/Service.svc/json" /></Services>
    </asp:ScriptManager>
    <div id="MainContent" onclick="editMessage">
        Loading....
    </div>
    <br />
    <span style="border:solid 1px silver;" id="editButton" onclick="editMessage();">
        Edit
    </span>
    <div id="EditorRegion" style="display:none;">
        <textarea id="TheEditor" rows="10" cols="10">
        </textarea>
        <br />
        <span style="border:solid 1px silver;" onclick="save();">
            Save
        </span>
    </div>
    </form>

    <script language="javascript" type="text/javascript">

        var wikiName = 'default';

        function OnAjaxLoad() {
            var userContext = new Object();
            ServiceOrientedAjax.Examples.Service1.GetWiki(wikiName, getMessageSuccess, onMessageFailure, userContext);
        }

        function editMessage() {
            $get('EditorRegion').style.display = '';
            $get('editButton').style.display = 'none';
            $get('MainContent').style.display = 'none';
            $get('TheEditor').value = $get('MainContent').innerHTML;
            $get('TheEditor').enabled = true;
        }

        function getMessageSuccess(wikiData, userContext) {
            var EditorRegion = $get('EditorRegion');
            EditorRegion.style.display = 'none';
            var content = $get('MainContent');
            content.innerHTML = wikiData.Body;
            content.style.display = '';
            $get('editButton').style.display = '';
        }

        function save() {
            var msg = $get('TheEditor').value;
            var userContext = new Object();
            userContext.msg = msg;
            userContext.title = wikiName;
            var wiki = new Object();
            wiki.Title = wikiName;
            wiki.Body = msg;
            ServiceOrientedAjax.Examples.Service1.SetWiki(wiki, onSaveSuccess, onMessageFailure, wiki);
            $get('TheEditor').enabled = false;
        }

        function onSaveSuccess(response, wiki) {
            getMessageSuccess(wiki, null);
        }

        function onMessageFailure(ex, userContext) {

            var EditorRegion = $get('EditorRegion');
            EditorRegion.style.display = 'none';
            var content = $get('MainContent');
            content.innerHTML = ex.get_message();
            content.style.display = '';
        }

        Sys.Application.add_load(OnAjaxLoad);
    </script>
</body>
</html>

WCF服务类:
using System;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Web;
using System.Runtime.Serialization;

namespace WcfServiceLibrary1
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in both code and config file together.
    [ServiceContract(Namespace = "ServiceOrientedAjax.Examples")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1 
    {
        [OperationContract]
        public void SetWiki(WikiData wiki)
        {
            HttpContext.Current.Application[wiki.Title] = wiki.Body;
        }

        [OperationContract]
        [WebGet]
        public WikiData GetWiki(string title)
        {
            WikiData wiki = new WikiData 
            { 
                Title=title,
                Body=(string)HttpContext.Current.Application[title] ?? "Hello WCF World!"
            };
            return wiki;
        }
    }

    [DataContract(Name = "WikiData",
        Namespace = "ServiceOrientedAjax.Examples")]
    public class WikiData
    { 
        [DataMember]
        public string Title { get; set; }

        [DataMember]
        public string Body { get; set; }

    }
}


Web.config 配置:
<system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="PoxBehavior">
          <webHttp />
        </behavior>
        <behavior name="JsonBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="Global">
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <!--   -->
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

    <services>
      <service name="WcfServiceLibrary1.Service1" behaviorConfiguration="Global">
        <endpoint address="" behaviorConfiguration="PoxBehavior"
        binding="webHttpBinding" contract="WcfServiceLibrary1.Service1" />
        <endpoint address="json" behaviorConfiguration="JsonBehavior"
        binding="webHttpBinding" contract="WcfServiceLibrary1.Service1" />
      </service>
    </services>
    
  </system.serviceModel>


PointMLP实战:5分钟用PyTorch搭建点云分类模型(附GitHub代码) 本文提供了基于ICLR 2022论文PointMLP的点云分类模型实战教程。通过PyTorch框架,详细介绍了从环境搭建、数据预处理、模型架构解析到训练推理的全流程,并分享了性能调优技巧。该模型利用残差MLP模块构建,结构清晰高效,适合开发者快速上手并应用于实际点云处理项目。 阅读详情

相关推荐

EBSD数据转ABAQUS的inp文件实操指南

晶体塑性有限元模拟中,如何将材料微观组织表征数据转化为可计算的有限元模型,是连接实验与仿真的关键环节。EBSD技术能够获取材料表面的晶体取向、晶粒形貌和晶界分布信息,但这类数据需要经过格式解析、欧拉角转换、网格生成等步骤,才能被ABAQUS等有限元软件读取。通过将扫描点坐标映射为节点、按像素邻域生成单元,并将Bunge约定欧拉角变换为局部坐标系方向余弦,用户可以准确构建包含真实微观结构的inp文件模型。这一流程广泛应用于金属材料形变、织构演化及应力集中分析等研究场景,有效提升仿真结果与实验的一致性。围绕数据

weixin_42509513的博客 310

Silverlight + WCF使用Linq to SQL以及ADO.NET Entity Data Model更新数据库子表方法

前言:日前,Microsfot已发布了Silverlight 4.0 RC2,其所主导的WCF RIA Services也渐渐为更多的开发人员所认识并使用,分布式N层结构数据访问要为WCF RIA Serices所代替了么? 但这不是我想要讨论的问题,这里仅是针对Silverlight + WCF在使用Linq to SQL以及ADO.NET Entity Data Model下的更新数据库子表的

Sunpire 1821

【推荐算法】召回模型总结

【推荐算法】召回模型总结

m0_48086806的博客 6241

通过WCF引用ListData.svc查询,更新数据

SharePoint 2010自带了一个开箱即用的WCF服务——ListData。本博文中,我们将一步一步的学习如何使用ListData.svc。 准备工作 创建一个网站,包含两个列表,分别是 客户和城市。为列表填写一些列表项。客户列表应包含一个名为城市的栏,作为查阅项关联到城市列表。 城市列表: 客户列表: 创建一个控制台应用程序(实...

weixin_30843605的博客 101

元宇宙通证- 九、IT/ICT发展史全景长图

九、IT/ICT发展史全景长图 (一)综述 IT是Information Technology的缩写,意为”信息技术“,包含现代计算机、网络、通信等信息领域技术。自1844年人类历史上发出来第一份电报,实现了信息的长图传输,信息技术发展的历史大幕随之拉开。信息技术的普遍应用,是进入信息社会的标志。 IT技术最早发源于半导体,然后发展处计算机、通信网和互联网,进而演进到现在的AI、XR、计算机、大数据、物联网、工业互联网、区块链、量子计算等。 有人说元宇宙是下一代互联网,有人说元宇宙是互联网的终极形态。 我们

沧海之巅的专栏 1万+

车载软件架构 —— AUTOSAR Vector SIP包(三)

### 上一篇文章中介绍了AUTOSAR基础软件供应商Vector公司的开发工具链,本文将继续介绍Vector公司的AUTOSAR产品。 ### -> 1、Vector SIP包中的StartApplication ### -> 2、StartApplication如何开始使用

Soly_kun的博客 829

SilverLight使用WCF RIA SERVICE实现对数据库的操作 (添加,删除,更新)

SilverLight搭建WCF聊天室详细过程 系列文章为大家演示了如何使用SilverLight搭建WCF即时通讯系统过程,多人视频正在开发中,我会持续更新这个系列,以后几篇我会对群里提出最多的问题进行解答并给出设计思路,WCF和IIS配置已经包含在此系列,希望各位朋友在提问前先找找前面的帖子,QQ群:.NET集中营45656086,位置已经不多,群里高手很多,而且比较有开源精神,我是营长,有问

Swarb的博客:低头做事,抬头做人 3492

ATS Request中的PASID的作用是什么

摘要: PASID(进程地址空间标识符)是PCIe ATS(地址转换服务)中的关键组件,用于标识不同进程或虚拟机的地址空间。其主要作用包括:1)支持多进程共享设备时隔离地址空间;2)实现共享虚拟地址(SVA),允许用户态程序直接访问设备;3)提升虚拟化性能(如SIOV),通过PASID区分虚拟机请求;4)增强安全性,基于PASID限制设备内存访问权限。PASID通过20位标识符在TLP前缀中传递,与IOMMU协作完成地址转换与缓存,适用于高性能计算、AI及虚拟化场景,但依赖硬件支持和软件适配。

元直的博客 1561

EF+WCF怎样更新数据?

public virtual void Update(T entity) { T current = this.Where(m => m.Id.Equals(entity.Id)) .SingleOrDefault(); if (current != null) { ...

weixin_34195142的博客 108

Oracle EBS R12 AR 标准发票 核心表结构

​ Oracle EBS R12 AR 标准发票 核心表结构 聚焦手动标准发票 (Standard Invoice),按头→行→分配→税→收款计划→会计分录→历史分层,标注主键、外键、关键字段、业务含义,同时说明表间关联关系,适配开发 / 运维 / 数据核对场景。 一、主数据层(发票头 + 行,核心业务表) 1. RA_CUSTOMER_TRX_ALL 【发票头表】 作用:存储整张发票头部信息,一张发票对应一条记录,AR 发票主表。 主键:CUSTOMER_TRX_ID (唯一 ID,系统内部键) 业

金牌架构师 281

【Flink】Flink 消费一段时间1万多条数据就卡死

我们有个现场环境,发现了奇怪的现象,就是每次启动任务后,消费1万多条数据后就会卡死,然后整个流不消费,也不往下输出,看起来卡死了一样。缺图这里面出现的网闸原因导致的,但是经过我们写了一个简单的kafka消费程序,然后在出问题的节点上消费数据,实际排查,发现不是这个问题。这个问题,发现也不是,这段时间没有进行过kafka数据清理。里面的问题。因为这个问题,我们后面的代码刻意规范了,不这样操作。后来是在没办法了,然后我们dump了线程,发现有如下代码。

九师兄 350

Silverlight + WCF使用Linq to SQL以及ADO.NET Entity Data Model更新数

前言:日前, Microsfot 已发布了 Silverlight 4.0 RC2 ,其所主导的 WCF RIA Services 也渐渐为更多的开发人员所认识并使用,分布式 N 层结构数据访问要为 WCF RIA Serices 所代替了么? 但这不是我想要讨论的问题,这里仅是针对 Silverlight + WCF 在使用 Linq to SQL<br />前言:日前,Microsfot已发布了Silverlight 4.0 RC2,其所主导的WCF RIA Services也渐渐为更多的开发人员所认识

Joydragon's IT Life 223

ximalaya 新xm-sign逆向思路

本文主要介绍目标网站新xm-sign值的逆向思路。仅代表个人理解,如有其他建议可在评论区沟通。声明仅仅记录一下自己的学习方法,不作为其他参考、更不作为商业用途。如有侵犯请联系本人删除。

weixin_66580433的博客 2017

wcf 简单实践 数据绑定 数据更新ui

wcf 简单实践 数据绑定 数据更新ui

xie__jin__cheng的博客 735

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

使用EF框架操作数据库开发WCF程序遇到的一些问题及解决办法

小弟由于项目需要,打算使用EF框架操作数据库开发WCF程序,其中遇到几个烦心的问题,现将部分解决办法放出,供大家批评指正,如有好的解决方法,还请各位大神不吝赐教。 其中一个问题是WCF的DataContext和DataMember声明。由于打算使用WPF开发分布式程序,使用WCF作为接口服务,故准备使用EF框架进行数据库操作,但是我个人的习惯都是先设计数据库,再由数据库生成Model,这就经常需要从数据库更新模型,导致之前的DataContext和DataMember声明问题,...

qq_17768539的博客 287

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

echarts 甘特图_百度echarts实现项目甘特图ajax+wcf

前端通过ajax访问后台WCF服务,写在getdata函数里方便以后定时调用,采用ajax无刷新更新数据aspx:var myChart = echarts.init(document.getElementById('main')); GetData(); function GetData() { var IP = '';//获取Webconfig里的服务器IP //通过Ajax获取数据 $.aj...

weixin_39630498的博客 326

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

wcf 接收post数据_百度echarts实现项目甘特图ajax+wcf

前端通过ajax访问后台WCF服务,写在getdata函数里方便以后定时调用,采用ajax无刷新更新数据aspx:var myChart = echarts.init(document.getElementById('main')); GetData(); function GetData() { var IP = '';//获取Webconfig里的服务器IP //通过Ajax获取数据 $.aj...

weixin_35632331的博客 110

WCF RIA 服务 (八)-- domain services 1

WCF RIA 服务 (八)-- domain services 1domain Services 是向客户端公开数据访问层的WCF Services。当我们创建一个domain services实例时,就指定了想要公开的实体类,以及这个domain Services所允许的数据操作。DomainService类 和派生类DomainService类

blackant2的专栏 3068

WCF从理论到实践(15):响应变化

本文目的 需求变化是软件开发过程中的一大难题,我们经常扼腕叹息:面对变化,我们的软件为何如此不堪一击?我们常常在众多需求变化导致的功能爆炸中疲于奔命,甚至迷失自我!这到底为什么?面对"拥抱变化"这种得呐喊,我们的感受应该是震耳欲聋,还是振聋发聩?如果你仍在困惑,可以来看一看WCF是如何摆脱这种困境的! 序幕 小王效力于北京的一家系统集成公司,该公司内部有一个WCF服务为各个部门所共用,...

weixin_34032792的博客 78
上一篇: 一个简单AJAX请求WCF实例
下一篇: AJAX应用服务器端:面向服务与WCF
sky1069
博客等级 码龄19年 7粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值