怎样用js调用wcf服务
需要SystemWebExtensionsdll(可能需要AJAXExtensionsToolboxdll)
网上下载ASPAJAXExtSetup
使用的时候把上面的2个dll放到bin下,并添加引用(一般服务器没有安装ASPAJAXExtSetup)
==============================
Web服务
==============================
using System;
using SystemWeb;
using SystemCollections;
using SystemWebServices;
using SystemWebServicesProtocols;
using SystemWebScriptServices;
using SystemData;
using SystemTextRegularExpressions;
/// <summary>
/// addComment 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuriorg/")]
[WebServiceBinding(ConformsTo = WsiProfilesBasicProfile1_1)]
[ScriptService]
public class manageComment : SystemWebServicesWebService
{
[WebMethod(EnableSession = true)]
public string CommentByID(string userName)
{
//支持session
}
public string DeleteHostComment(int replayID)
{
}
}
aspx页面设置web服务文件的路径
===============================
<asp:ScriptManager ID="smAddComment" runat="server">
<Services>
<asp:ServiceReference Path="~/WS/manageCommentasmx" />
</Services>
</asp:ScriptManager>
js调用
=================================
manageCommentCommentByID('名称');
manageCommentDeleteHostComment(1);
tip:调用的格式->[命名空间]类名方法名(参数1[,参数2……])
1,可以先传到视频网站上,然后引用,例如优酷网站,截取以下视频代码插入就可以了<object id="playerObject" width="100%" height="100%" name="playerObject" data="视频的url" style="" type="application/x-shockwave-flash"><param name="bgcolor" value="#000000"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="wmode" value="opaque">
<param name="quality" value="high">
<param name="flashvars" "></object>。
2:在客户端服务器的WCF服务代码里调用ReadFile方法,传入公司服务器上文件的物理路径。
3:即可在客户端服务器端获取到公司服务器文件的二进制流了,之后可以保存下来,也可以直接回发给客户客户端。
4:可以用SQL语句来获取件:select Tc from openrowset(bulk N'D:\DB_Backup\E5KST01\audit_trail_20130419bak', single_blob) T(c)。
WCF在跨域传输使用了两种模型的方法调用:一种是同步模型,这种模型显然对那些需要大量操作时间的方法调用(如从数据库中获取大量数据时)是一种痛苦的选择。另一种是异步模型的方法调用,这种模型是一种非阻塞方法,其方法调用期间并不等到方法调用结束获得结果才返回,而是方法调用一经开始就马上返回,程序可以继续向前执行,被调用方法和主程序同时执行,在调用方法结束才返回结果。显然这种模型给了我们很好的编程和使用体验。
基于WCF在普通的编码是以文本编码方式在信道之间传输信息的,这种编码会把所有的二进制信息以字节数组的形式存储,并以Base64进行编码,而Base64则是用三个字节来储存4 个字符信息。使得数据量增大约30%以上。在WCF中引入了一种专门针对数据流进行优化编码的MTOM模型。下面我们使用编码模型和调用模型三种方式来改写文件流的传输,以提高WCF应用程序的性能。
1、 MTOM模型:
这模型在于将SOAP消息编码成SOAP MT OM(消息传输优化机制)编码。这种编码是为那些包含大量的二进制数据的SOAP消息而做的,它是把数据流作为SOAP消息的附件而添加的。所以利用这种编码在传输信道之间传输可以显著提高传输性能。在WCF中MTOM模型的操作契约中只能使用单个Stream对象作为参数或者返回类型。
这种模型的特点如图所示:
11实现服务契约
服务契约是服务所支持的操作、使用的消息交换模式和每一则消息的格式,它控制消息被格式化的方式,在这里由于要使用MTOM编码消息,所以在操作契约中必须要以单一的Stream对象为输入输出参数。所以这儿我们把服务定义为如下的形式:
[ServiceContract]
public interface ISendStreamService
{
[OperationContract]
void SendStream(Stream stream);
//这个方法的是为了传递文件的参数而设的
[OperationContract]
void FileNameSetting(string filename, string destinationpath);
}
另外我们还定义了一个传输文件路径的名称的辅助方法:FileNameSetting();
12实现服务器方法
在上面定义了公共的接口后,接下来我们就实现接口的方法,主要的方法的目的是为了传输Stream对象,由于Stream是一个抽象类,所以这儿以文件流为操作对象来使用SendStream()这个方法。
13客户通过接口调用服务器方法
客户端调用服务器方法至少有三种,这里我们选择工厂方法来实现,SystemServiceModeChannelChannelFactory<T>类是这个信道工厂类,它的方法CreateChannel()可以创建T的实例。
ISendStreamService proxy=new
ChannelFactory<ISendStreamService>(“WSHttpBinding_ISendStreamService”)Create-
Channel();
proxyFileNameSetting(fileSubstring (fileLastIndexOf ("\\")+1), filePath);
proxySendStream(inStream);
14服务器和客户端的配置信息
配置信息定义了双方通信的终结点、绑定、契约行为及其他的配置如安全,可靠性等。服务器的配置如:
<service behaviorConfiguration="SendStreamServiceBehavior"
name="SendStreamService">
<endpoint address=" http://localhost:5504/WebSite2/ISendStreamService "
binding="wsHttpBinding" bindingConfiguration="MTMOBinding"
contract="ISendStreamService">
</endpoint>
<bindings>
<wsHttpBinding>
<binding name="MTMOBinding" messageEncoding="Mtom">
</wsHttpBinding>
</bindings>
</service>
<%@ ServiceHost Language="C#" Debug="true"
Service="YourNamespaceYourServiceClass"
Factory="SystemServiceModelActivationWebServiceHostFactory" %>
0条评论